关闭

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

标签: 批处理框架spring batch
958人阅读 评论(1) 收藏 举报
分类:

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);


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10347次
    • 积分:153
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论