首页 > 数据库 >多线程事务回滚sqlSession, spring-mybatis 开启事务

多线程事务回滚sqlSession, spring-mybatis 开启事务

时间:2023-02-03 16:25:57浏览次数:42  
标签:事务 spring List sqlSession callableList employeeMapper 多线程

 @Resource
SqlContext sqlContext;
/**
 * 多线程事务.
 * @param employeeDOList
 */
@Override
public void saveThread(List<EmployeeDO> employeeDOList) throws SQLException {
    // 获取数据库连接,获取会话(内部自有事务)
    SqlSession sqlSession = sqlContext.getSqlSession();
    Connection connection = sqlSession.getConnection();    
    try {
        // 设置手动提交
        connection.setAutoCommit(false);
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //先做删除操作
        employeeMapper.delete(null);
        ExecutorService service = ExecutorConfig.getThreadPool();
        List<Callable<Integer>> callableList  = new ArrayList<>();
        List<List<EmployeeDO>> lists=averageAssign(employeeDOList, 5);
        for (int i =0;i<lists.size();i++){
            List<EmployeeDO> list  = lists.get(i);
            Callable<Integer> callable = () -> employeeMapper.saveBatch(list);
            callableList.add(callable);
        }
        //执行子线程
       List<Future<Integer>> futures = service.invokeAll(callableList);
        for (Future<Integer> future:futures) {
            if (future.get()<=0){
                connection.rollback();
                 return;
            }
        }
        connection.commit();
        logger.info("save successful!");
    }catch (Exception e){
        connection.rollback();
        log.info("error",e);
        throw new ServiceException("10002","businsess exception");
       // throw new ServiceException(ExceptionCodeEnum.EMPLOYEE_SAVE_OR_UPDATE_ERROR);
    }
}

 

标签:事务,spring,List,sqlSession,callableList,employeeMapper,多线程
From: https://www.cnblogs.com/smarttony/p/17089657.html

相关文章

  • Spring注解开发
    Spring原始注解Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。Spring原始注解主要是替代......
  • springboot整合thymeleaf
    springboot的打包方式默认是jar包的形式,jsp无法在压缩包的形势下进行编译所以springboot引入了一些其他的模板引擎比如thymeleaf表达方式语法用途变量取值${.........
  • 狂神说Springboot笔记
    狂神说SpringBoot视频链接:B站教学视频SpringBoot系列笔记:狂神说SpringBoot01:Hello,World!狂神说SpringBoot02:运行原理初探狂神说SpringBoot03:yaml配置注入狂神......
  • Springboot websocket 的简单使用
    项目结构:引入依赖:"org.springframework.boot:spring-boot-starter-websocket","org.springframework.boot:spring-boot-starter-thymeleaf",启动类:publicclassDem......
  • 【Spring事物三千问】DataSource的设计和常用实现——Hikari、Druid
    javax.sql.DataSourcejavax.sql.DataSource是jdk提供的接口,各个连接池厂商和Spring都对DataSource进行了设计和实现。javax.sql.DataSource是连接到物理数据源的......
  • 分布式事务2种协议 及 4种模式
    分布式事务协议解决分布式事务,也有相应的规范和协议。分布式事务相关的协议有2PC、3PC。由于三阶段提交协议3PC非常难实现,目前市面主流的分布式事务解决方案都是2PC协议。......
  • Linux 配置Tomcat、SpringBoot项目开机自启
    Linux配置Tomcat、SpringBoot项目开机自启#javaenvironment指定java环境exportJAVA_HOME=/home/jdk1.8.0_11exportCLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAV......
  • springcloud:gateway聚合swagger 下篇(十二)
    0.引言上一章我们之前讲解了在​​单个服务中部署swagger​​,但每次都需要在不同的端口中访问不同服务的swagger-ui。那么本期我们就来讲解一下,如何从一个统一的入口访问不......
  • springcloud:接口文档自动生成器swagger详解 上篇(十一)
    0.引言在微服务的开发工作中,前后端的协同开发是必不可少的,随着服务数与接口数的增加,手写接口文档成为了一个苦活累活,很多程序员对此也很抵触。同时我们也需要有一个地方来......
  • springcloud:安装rabbitmq并配置延迟队列插件
    0.引言本期主要讲解如何利用docker快速安装rabbitmq并且配置延迟队列插件1.docker安装1.1安装rabbitmq1、下载镜像dockerpullrabbitmq2、安装镜像dockerrun-d--host......