社区
Web 开发
帖子详情
多线程中每个线程独立的事务管理
明哲哈哈哈
2017-10-13 09:31:05
项目背景:web项目 spring+hibernate 已配置spring进行事务控制
问题:
现在有一个需求,需要我开启多个线程同时执行一段代码, 代码中,涉及到数据库操作,
但是我希望每个单独的线程在失败或异常时,能回滚其中的事务
线程的实现类中,包含很多service和dao类,请问我该如何生成线程实例,来保证其中的事务控制互相不影响
...全文
1387
4
打赏
收藏
多线程中每个线程独立的事务管理
项目背景:web项目 spring+hibernate 已配置spring进行事务控制 问题: 现在有一个需求,需要我开启多个线程同时执行一段代码, 代码中,涉及到数据库操作, 但是我希望每个单独的线程在失败或异常时,能回滚其中的事务 线程的实现类中,包含很多service和dao类,请问我该如何生成线程实例,来保证其中的事务控制互相不影响
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
明哲哈哈哈
2020-08-04
打赏
举报
回复
引用 3 楼 你笑的像一条狗 的回复:
全部子线程执行的数据如何回滚。
最后的处理是通过楼上的事务隔离级别来控制的, 子线程开启新事物,抛出异常自动回滚
TizzyGoodhealth
2020-06-11
打赏
举报
回复
全部子线程执行的数据如何回滚。
对梦想的牵挂
2019-04-29
打赏
举报
回复
手动创建事务 //可以通过注解实现 @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); }
明哲哈哈哈
2017-10-13
打赏
举报
回复
求救,zsbd
多
线程
会在一个事务里面吗?
每个
线程
在进入被@Transactional注解的方法时,都会检查当前
线程
是否有活动的事务上下文,如果没有,则会创建一个新的事务;
每个
线程
都有自己
独立
的事务上下文,并且这些事务上下文是
线程
本地的、互不干扰的。由于Spring AOP的代理机制通常是通过重写目标方法来实现的(对于没有实现接口的类,Spring使用CGLIB代理,通过继承目标类并重写其方法来创建代理对象),因此,如果目标方法是。在实际应用
中
,更常见的是
每个
线程
独立
管理自己的事务,并通过适当的事务传播行为和同步机制来确保数据的一致性和完整性。
多
线程
事务
我们在工作
中
经常会到往数据库里插入大量数据的工作,但是既需要保证数据的一致性,又要保证程序执行的效率。因此需要在
多
线程
中
使用事务,这样既可以保证数据的一致性,又能保证程序的执行效率。但是spring自带的@Transactional注解无法满足
多
线程
间的事务一致性,因为这几个事务执行的
线程
不同,无法保持数据的一致性。
多
线程
中
每个
子
线程
的事务(@Transactional注解只针对某一个子
线程
生效)
多
线程
中
子
线程
事务
多
线程
事务控制
多
线程
事务控制 spring无法对
多
线程
进行事务控制,原因是:
多
线程
底层连接数据库的时候,是使用的
线程
变量(TheadLocal),所以,开多少
线程
理论上就会建立多少个连接,
每个
线程
有自己的连接,事务肯定不是同一个了。 解决办法:我强制手动把
每个
线程
的事务状态放到一个同步集合里面。然后如果有单个异常,循环回滚
每个
线程
。 假如service
中
的一个方法由以下逻辑构成: 1.前面的是调用
多
线程
前的操作 2.调用
多
线程
的操作 假设其
中
任何一个与数据库的更新操作发生了异常,想要整体回滚怎么办?那么就要
多
线程
与事务
数据量大,处理慢,达不到性能要求。。。 这个时候,我们很容易就会想到用
多
线程
去提升处理速度。 但要求还不仅是快这么简单,还需要保证一个
线程
出错,所有的数据都会滚。。。 这时候很多同学就会琢磨出一个奇怪的概念,
多
线程
事务?
多
线程
事务既可以
多
线程
提高效率,又可以所有
线程
保证事务回滚,是真的吗??? 别问,问就是假的,
多
线程
事务是一个伪命题 说到事务,那我们首先的撸一下ACID,事务的四个特性 A:原子性,一个事务要么全部提交成功,要么全部失败回滚,不能只执行其
中
的一部分操作 C:一致性,事务的执行不能破坏数
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章