最近开发中老发现事物有时候生效,有时候又不生效。就查了下资料,总结一些会影响事物失效的原因。
事物怎么配置这里就不累赘了,网上一搜一大把。
1、数据库引擎:尤其是mysql数据库只有是InnoDB引擎的时候事物才能生效。
show engines 查看数据库默认引擎
SHOW TABLE STATUS from 数据库名字 where Name='表名' 如下
SHOW TABLE STATUS from rrz where Name='rrz_cust'
修改表的引擎alter table table_name engine=innodb;
2、mvc项目controler和service要分开扫描,不要为了简单写到一句里,因为加载controler的时候同时加载了其他带有事物的service模块就会导致事物失效
只扫描controler的
<context:component-scan base-package="com.rrz" use-default- filters="false ><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
扫描其他的<context:component-scan base-package="com.rrz">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
3、事物回滚的异常基本。默认情况下事物的异常级别是运行时异常,也就是RuntimeException,这样如果是检查基本的异常引起额错误就不会回滚。所以需要的话要自己制定异常基本。声明式事物的制定方式@Transactional(rollbackFor=Exception.class)配置的自己去百度吧,到处都是
4、多数据源时,交叉事物。这个要考虑好怎么自己管理自己的事物。
暂时就就想起这么多。有遇到的时候再补点
可以进qq交流群216396734咨询
事物怎么配置这里就不累赘了,网上一搜一大把。
1、数据库引擎:尤其是mysql数据库只有是InnoDB引擎的时候事物才能生效。
show engines 查看数据库默认引擎
SHOW TABLE STATUS from 数据库名字 where Name='表名' 如下
SHOW TABLE STATUS from rrz where Name='rrz_cust'
修改表的引擎alter table table_name engine=innodb;
2、mvc项目controler和service要分开扫描,不要为了简单写到一句里,因为加载controler的时候同时加载了其他带有事物的service模块就会导致事物失效
只扫描controler的
<context:component-scan base-package="com.rrz" use-default- filters="false ><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
扫描其他的<context:component-scan base-package="com.rrz">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
3、事物回滚的异常基本。默认情况下事物的异常级别是运行时异常,也就是RuntimeException,这样如果是检查基本的异常引起额错误就不会回滚。所以需要的话要自己制定异常基本。声明式事物的制定方式@Transactional(rollbackFor=Exception.class)配置的自己去百度吧,到处都是
4、多数据源时,交叉事物。这个要考虑好怎么自己管理自己的事物。
暂时就就想起这么多。有遇到的时候再补点
可以进qq交流群216396734咨询