关于#mysql#的问题:mysql事务(语言-java)

单体项目 数据源是一个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注解的方法,它将不会开启事务。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^