当前位置:   article > 正文

Spring 数据库事务配置_spring 定义数据库事务

spring 定义数据库事务

最近在接手公司的一个项目,在其中有涉及到事务回滚的情况,默认情况下在方法上加入@Transactional注解就可以针对在方法内抛出RuntimeException时进行数据库回滚,但测试的实际情况没有达到预期。分析系统配置后发现系统配置了两个同名的transactionManager bean实例。根据以前对Spring的理解认为Spring中定义了两个同名的bean肯定会报错啊,但这里为什么没有任何提示呢?下面就说一下为何没有提示。

Spring 上下文中定义同名bean

spring对同一配置文件中相同id或者name的两个或以上的bean时,做直接抛异常的处理,而对不同配置文件中相同id或者名称的bean,只会在打印日志级别为info的信息,信息内容大概为"Overriding bean definition for bean xxx : replacing xxx with beanDefinition "。后面出现的bean定义会覆盖前面出现的bean定义。这使得问题的排查很困难。Spring DefaultListableBeanFactory.java 中定义了allowBeanDefinitionOverriding 属性,该属性的默认值为true。只要将其值改为false就可以达到重复定义bean报错的目的


在回到一开始的问题,为什么数据库事务失效。分析系统后发现,系统配置了两个数据源,虽然两个数据源指定的事务管理器类型不是同一个类型的,但是由于使用了相同的bean id导致先定义的被覆盖了,导致对使用前一个事务管理器的数据源的事务失效了。

@Transactional注解不指定TransactionManager时会使用哪一个TransactionManager

@Transactional事务失效原因

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/995184
推荐阅读
相关标签
  

闽ICP备14008679号