Spring事务机制中@Transactional失效的原因

      最近项目中发现spring事务机制中@Transactional会失效,一个方法抛出异常,但是数据库中修改的数据并不会回滚,于是看了一些资料,发现以下情况@Transactional事务会失效。

1.首先检查配置,在项目的spring配置文件检查是否配置开启事务

        <bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="routeDataSource" />
	</bean>
	
	<!-- 事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

2. 同一个类中, 一个未标注 @Transactional 的方法去调用标有 @Transactional 的方法, 事务会失效

If you use (default) Spring Proxy AOP, then all AOP functionality provided by Spring (like @Transational) will only be taken into account if the call goes through the proxy. -- This is normally the case if the annotated method is invoked from another bean.

3. 在非public方法上标注@Transactional, 事务无效

When using proxies, you should apply the @Transactional annotation only to methods with public visibility. If you do annotate protected, private 

or package-visible methods with the @Transactional annotation, no error is raised, but the annotated method does not exhibit the configured

 transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值