打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
SpringMVC 手动控制事务提交

在springmvc的开发中,有个比较扯的东西,就是当你在代码中新开了一个线程,那么这个线程里面将不会有事物的存在.


1至于为何不会有事物的存在: 因为我们的事物都是有springmvc统一管理,而你新开了个线程,并没有提交给springmvc进行统一的管理.所以,如果没有手动申明,是不会有事物的存在的.



解决..


这样就可以提供事物支持了..

在需要加事务的方法上加上

DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx
.getBean("txManager");
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
try {
//逻辑代码,可以写上你的逻辑处理代码
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}

这是在有 ApplicationContext 的情况下、

 

ApplicationContext 不存在的情况下

 

    @Autowired

    private DataSourceTransactionManager txManager;

 

   DefaultTransactionDefinition def = new DefaultTransactionDefinition();

   def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务

   TransactionStatus status = txManager.getTransaction(def); // 获得事务状态

try{
//逻辑代码,可以写上你的逻辑处理代码
txManager.commit(status);
}catch(Exception e){
txManager.rollback(status);
}





在这里,其实还有另外一个坑

特别需要注意,如果这里开启了事物.没有提交,也没有回滚,没有关闭,

这个时候,服务器并不会抛出什么异常, 刚开始运行也不会有什么错误,一切运行皆正常,

当这个事物开启到一定程度后,服务器就会像死了一样,不处理其他的事物, 但是又没有挂,

反正当时很诡异,当初我们找了好久,才想起就改了这个地方, 特意写上这里,下次千万注意!!


所以,当开启了事物后,一定要提交或者关闭,或者回滚.....

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring的事务管理--事务隔离级别
透彻理解Spring事务设计思想之手写实现
JTA 深度历险
Spring源代码解析(六):Spring声明式事务处理
花了20天的时间给粉丝整理的一套"最全"的Java求职笔记(四)
SpringMVC3.1 Hibernate4.1.7完全基于注解配置(零配置文件)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服