搭建批处理框架问题总结Spring Batch + Spring Batch Admin + Quartz

苍德寿
2023-12-01

Transaction Manager 事务管理器问题:

问题现象:在Tasklet中调用Dao  update更新数据,发现数据库没有变。

问题分析:猜测是没有commit

原来,我用了spring batch admin作为批处理界面管理,

但是spring-batch-admin-manager*.jar内部data-source-context.xml定义了数据源和事务管理器

与我的dao模块的datasource,  transaction manager冲突了。


这里实际用了两个事务管理器:

* 1)transactionManager 用于spring batch登记BATCH_开头的框架相关表:
* 配置在spring-batch-manager.jar的data-source-context.xml中.
* JobRepository, JobRegistry, JobLauncher, JobService都是使用这个事务管理器。

* 2) 用于 控制TaskletStep中(调用dao)业务逻辑数据的提交和回滚,
* 所以必须和act-dao中的mybatis事务管理器txManager是同一个对象,才能让spring batch在TransactionTemplate中自动提交和回滚
* 如果spring batch和Dao使用的事务管理器不是同一个,会导致Dao的更新丢失.


原来的代码自动注入有问题,用的是上面1) transactionManager:

@Resource
PlatformTransactionManager transactionManager;

taskletStep.setTransactionManager(transactionManager);


解决方案:TaskletStep改为和Dao一样,使用2) txManager

@Resource(name="txManager")
PlatformTransactionManager txManager;

taskletStep.setTransactionManager(txManager);


 类似资料: