1. 程式人生 > >搭建批處理框架問題總結Spring Batch + Spring Batch Admin + Quartz

搭建批處理框架問題總結Spring Batch + Spring Batch Admin + Quartz

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