2021-06-25 多线程事务回滚方法(二) 多线程事务回滚方法(二) 我们开发的时候常常会遇到多线程事务的问题。以为添加了@Transactional注解就行了,其实你加了注解之后会发现事务失效。原因:数据库连接spring是放在threadLocal里面,多线程场景下,拿到的数据库连接是不一样的,即是属于不同事务。本文是基于springboot的@Async注解开启多线程,,并通过自定义注解和AOP实现的多线程事务,避免繁琐的手动提交/回滚事务 (CV即用、参数齐全、无需配置)一、springboot多线程(声明式)的使用方法?1、springboot提供了注解@Async来使用线程池,具体使用方法如下:(1) 在启动类(配置类)添加@EnableAsync来开启线程池(2) 在需要开启子线程的方法上添加注解@Async注意: 框架默认 -----> 来一个请求开启一个线程,在高并发下容易内存溢出所以使用时需要配置自定义线程池,如下:@Configuration @EnableAsync public class ThreadPoolTaskConfig { @Bean("threadPoolTaskExecuto... 王子 2021-06-25 springboot,多线程 714 阅读 1 评论 2021年06月25日 714 阅读 1 评论
2021-02-25 多线程事务回滚方法(一) 多线程事务回滚方法(一) 介绍1.最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。2.在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主线程修改的数据则不会回滚,导致数据错误。案例演示下面是事务不成功案例演示。线程池配置package com.mry.rollback.config; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * 线程池配置 */ public class Executor... 王子 2021-02-25 springboot,多线程 246 阅读 0 评论 2021年02月25日 246 阅读 0 评论