spring @Transactional注解事务不起作用

raindropxx 发布于 2017/09/20 12:03
阅读 328
收藏 0
@Transactional(rollbackFor=Exception.class)
public class TransactionServiceImpl{
	public void testTransactionService() throws Exception {
		commonMybatisDao.executeSql(StaticConfig.DEFAULTDATASOURCE, "insert into test(a) values('1')");
		System.out.println("12331");
		String n=null;
		System.out.println(n.length());
		commonMybatisDao.executeSql(StaticConfig.DEFAULTDATASOURCE, "insert into test(b) values('2')");
		
	}



}

一个spring工程使用注解事务,在本机tomcat容器发布下测试方法事务能回滚,本机的虚拟机Ubuntu Linux下用weblogic发布事务也能回滚,但是发布到 Oracle Linux 下的weblogic事务就失效了,配置如下

    <!-- 事务控制器注入 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>


    <!-- 开启事务的注解配置(@Transactional) -->
    <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>

哪位大哥能不能解释帮忙看看什么问题?

加载中
0
long_ai_xin
long_ai_xin

看不出来. 只是碰到过的坑分享下:

事务只有配置在public方法上,且是被外部调用时才有效,也就是说:事务配置在private和protected方法上肯定是没有用处的;事务配置在public方法上,但该public方法被内部调用时事务也是无效的。

raindropxx
raindropxx
不是这个问题,是用在public上的。
0
_Mr_Right_
_Mr_Right_

建议 看下你的表引擎 是否支持是我回滚。

raindropxx
raindropxx
应该是支持的 因为我现在把注解事务改成手动创建事务控制 ,回滚就生效了
0
冷基

感觉不会有这样的差异,怀疑是你的验证结果错了。能具体说下你的测试方法吗?

raindropxx
raindropxx
测试方法我在上面已经贴来了,我同样的代码发布到Oracle Linux 和Ubuntu Linux 就产生了不同的效果,前者注解事务就不起作用 报错没有回滚,我现在已经改成手动创建事务去控制了,手动事务在Oracle Linux上是有效的,很奇怪
返回顶部
顶部