单体项目 数据源是一个mysql
1: 在springboot中的controller层添加事务是不生效的原因是什么?
2: 若在sevice层和dao层中间再加入一层调用,那么此时在service中的事务是否会生效,为什么?
自己验证的一个视频
请各位赐教
在Spring Boot中添加事务,需要满足以下条件:
确保应用程序已经正确配置了数据源和事务管理器。
事务必须被@Transactional注解标注。
在需要应用事务的方法中调用了其他的标记了@Transactional注解的方法,即使用到了AOP代理。
如果以上三个条件都满足,那么在Controller层添加事务应该是有效的。如果不生效,可以考虑检查是否满足以上三个条件。
如果在Service层和DAO层之间添加了一层调用,那么在Service中的事务仍然会生效,因为Spring使用的是基于代理的事务管理。代理类会包装调用目标方法的对象,以便在方法执行时启用事务管理。只要@Service注解添加到该类中,并且在调用方法上使用了@Transactional注解,代理类将为目标方法添加事务。因此,在Service层和DAO层之间添加另一层调用不会影响事务管理的工作原理。
1.在Spring Boot中,Controller层是不应该添加事务的,因为Controller层的职责是接收和处理请求,并返回响应,它们不应该对数据库进行任何修改操作。通常情况下,事务应该被添加在Service层或DAO层中。
2.如果在Service层和DAO层之间添加了一层调用,Service层中的事务仍然会生效,因为Spring使用代理对象来控制事务,代理对象会拦截@Transactional注解所标记的方法,开启或提交事务。这意味着在Service层的方法中调用另一个带有@Transactional注解的方法时,事务仍然会被正确地管理。但是,如果在Service层和DAO层之间添加了一个没有@Transactional注解的方法,它将不会开启事务。
不知道你这个问题是否已经解决, 如果还没有解决的话: