致命问题多数据源引发SpringBatch多事物
文章目录
- 一、如何查看SpringBatch原数据和业务数据是一个事物
- 二、多数据源如何引发SpringBatch多事物
写在前面: 我是「境里婆娑」。我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信念丝毫未减,眼前这个少年,还是最初那张脸,面前再多艰险不退却。
写博客的目的就是分享给大家一起学习交流,如果您对 Java感兴趣,可以关注我,我们一起学习。
前言:我们项目在运行的时候出现了多事物问题,SpringBatch原数据表提交和业务表数据提交用的不是一个事物,这在项目运行中是一个非常致命的问题。在极端情况下断点续跑可能会出现丢失数据,所以解决这个问题迫在眉睫。
一、如何查看SpringBatch原数据和业务数据是一个事物
SpringBatch源代码TaskletStep这个类的doInTransaction这个方法时保存业务数据和SpringBatch源数据表。
保存业务数据
result = tasklet.execute(contribution, chunkContext);保存SpringBatch上下文表
getJobRepository().updateExecutionContext(stepExecution);保存SpringBatch step表
getJobRepository().update(stepExecution);
为了验证保存业务数据和保存SpringBatch源数据是使用一个事物提交,我们可以通过debug方式分别把断点打到这三行代码上。
result = tasklet.execute(contribution, chunkContext);
getJobRepository().updateExecutionContext(stepExecution);
getJobRepository().update(stepExecution);
查询SpringBatch业务表和源数据表断点走完业务表无数据、batch上下文表,batch_step_execution表都是最初是状态则说明是一个事物。
select * from batch_step_execution ORDER BY STEP_EXECUTION_ID desc;
select * from batch_step_execution_context order by STEP_EXECUTION_ID desc;
select * from cat;
batch_step_execution_context初始状态
159 {"batch.taskletType":"org.springframework.batch.core.step.item.ChunkOrientedTasklet","FlatFileItemReader.read.count":0,"batch.stepType":"org.springframework.batch.core.step.tasklet.TaskletStep"}
batch_step_execution初始状态
187 3 cafeCatStep 1015 2020-11-25 10:02:05 2020-11-25 10:03:03 STARTING 0 0 0 0 0 0 0 0 UNKNOWN 2020-11-25 10:03:03
SpringBatch源码TaskletStep类doInTransaction方法
public RepeatStatus doInTransaction(TransactionStatus status) {TransactionSynchronizationManager.registerSynchronization(this);RepeatStatus result = RepeatStatus.CONTINUABLE;//代码省略.......result = tasklet.execute(contribution, chunkContext);//代码省略...stepExecutionUpdated = true;getJobRepository().updateExecutionContext(stepExecution);getJobRepository().update(stepExecution);//代码省略...return result;}
二、多数据源如何引发SpringBatch多事物
项目中使用了多数据源,而且重写了BasicBatchConfigurer这个类的这个initialize方法。而且这个类中重新new了一个新的数据源,通过各种排查确定出原因是这个new的新数据源导致多事物问题。
详细代码如下:
总结:我们最好不去修改原生态的SpringBatch代码,否则会出现意想不到的结果。
致命问题多数据源引发SpringBatch多事物相关推荐
- SpringBoot--Druid多数据源配置
SpringBootDruid多数据源Atomikos 多数据源 导入依赖 <!-- MySql驱动 --> <dependency> <groupId>mysql ...
- spring boot 三种类型事物实现说明
首先需要了解的是spring boot 对事物的分类 1: JDBC 事物 引入依赖包 spring-boot-starter-jdbc jdbc事物是传统方式,直接连接数据库进行操作. 需要增加配置 ...
- SpringBoot分表分库配置多数据源
1.背景的介绍 有时候我们需要做分库分表,那么肯定存在多数据源,Spring Boot和Mybatis的多数据源是如何整合的呢?比如说我们现在做了一个浪迹天涯管理的后台系统,商品信息是存在itemCe ...
- 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 )
文章目录 一.Activity 启动源码分析 ( AMS | ActivityManagerService ) 1.Instrumentation 调用 AMS 方法 2.ActivityStarte ...
- Spring 2.x AOP 配置方式整理
來源:http://www.javaeye.com/topic/320553 spring官方手册给出的配置实例. ------------------------------------------ ...
- system.exception所有子类详解
一直以来写代码抛出的异常都用的exception,从来没有像书上教的那样具体可能是啥异常就抛对应的异常,最后才说用的exception异常类抛异常.前段时间整理代码的时候突然感觉好像从来也就没有对异常 ...
- Zhishi.me - Weaving Chinese Linking Open Data
Zhishi.me - Weaving Chinese Linking Open Data 1. 困难 managing the heterogeneity of knowledge indiffer ...
- 物联网识别技术期末复习概要
物联网识别技术期末复习概要 物联网识别技术 第一章 物联网的体系结构: 感知层:物联网的皮肤和五官,主要任务是识别物体,采集信息 网络层:物联网的精神中枢和大脑,负责信息传递和处理 应用层:物联网的社 ...
- 【Mybatis源码】源码分析
[Mybatis源码]源码分析 (一)Mybatis重要组件 [1]四大核心组件 (1)SqlSessionFactoryBuilder (2)SqlSessionFactory (3)SqlSess ...
最新文章
- Gbps接口面向汽车应用
- 关于C/C++的trigraphs和Digraphs
- 网易云助力云音乐短视频功能快速上线
- 分布式系统关注点(14)——「弹性架构」详解
- Trumb/ARM 指令模式
- doc无法编译java文件_java编译成jar文件.doc
- 三次握手wireshark抓包分析,成功握手和失败握手
- linux内核之kfifo队列
- 0302借软件工程触IT
- 深度学习优化算法大全系列7:NAdam,算法选择,调参
- java飞机大战boss素材_java小游戏飞机大战 源代码以及素材
- 机器学习周刊第二期:深度学习上了Nature
- 介绍中国传统节日的网页html,中国传统节日大全表 中国16个传统节日介绍
- 10分钟白嫖我的常用的在线工具网站清单
- micropython STM32移植笔记(一)
- 区间dp入门——总结+习题+解析
- 20211104:Excel今天距某个日期后90天还剩多少天
- 如何将多个excel表格合并成一个_怎样在线就能将多个PDF文档合并成一个?
- H.264及编解码调试
- 极客时间--数据结构与算法之美
热门文章
- oracle恢复库覆盖原来的库,oracle如何恢复被覆盖的存储过程
- 帆软日期控件变灰_FineReport-JS脚本常见日期使用整理
- JVM实战与原理---类加载机制
- C++ 标准库类型 string
- PyQt5 笔记3 -- 信号与槽
- TensorFlow 笔记1--基本用法
- ICML论文录取难度逐年上升,New In ML为你特设“名师辅导班”
- 【机器学习】盘点Kaggle中常见的AutoML工具库及用法
- Github开源!适合初学者的机器学习和深度学习的资料合集
- 【时间序列】时序预测竞赛之异常检测算法综述