springboot默认嵌入的容器是tomcat,tomcat是用线程池来处理网络请求的,所以在后台开发业务接口时需要考虑多线程环境下一些常见的问题,比如数据同步。如果涉及到数据库的操作时,常常会引入事务的问题,这时又必须考虑事务的隔离级别、事务的传播级别。如果一个接口既涉及加锁、又涉及事务,那么在进行业务逻辑设计时就必须要考虑或者说意识到以下几点:

1.通常事务的隔离级别是read-commited,一个事务只有提交后所做的改变才可以被其他事务读取到。

2.事务的传播级别一般是propagation-required,即子函数里的事务会加入到父函数里的事务中合成一个事务。

3.如果要通过加锁来实现数据同步,且在锁的范围内涉及到事务,请确保锁的范围一定要覆盖住事务的范围。比如如果一个service层的接口处于事务管理范围内,就需要在controller层加锁,才能确保一个线程里读到的数据一定是另一个线程里的事务提交之后的最新值。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐