Transactions 使用JSR-352的JobListener将记录插入数据库
我试图在JobListener实现的afterJob()方法中插入一些记录。我的听众如下所示:Transactions 使用JSR-352的JobListener将记录插入数据库,transactions,listener,spring-batch,jsr352,Transactions,Listener,Spring Batch,Jsr352,我试图在JobListener实现的afterJob()方法中插入一些记录。我的听众如下所示: public class SampleListener2 implements JobListener { @Autowired DataSource dataSource; @Override public void beforeJob() throws Exception {} @Override public void afterJob()
public class SampleListener2 implements JobListener {
@Autowired
DataSource dataSource;
@Override
public void beforeJob() throws Exception {}
@Override
public void afterJob() throws Exception {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List<Object[]> objectList = new ArrayList<Object[]>();
Object[] objectArray = {System.currentTimeMillis(), "After Job", "After Job", "1.0"};
objectList.add(objectArray);
jdbcTemplate.batchUpdate("insert into RAW_REPORT(DATE,IMPRESSIONS,CLICKS,EARNINGS) values (?,?, ?, ?)", objectList);
System.out.println("After Job 2");
}
公共类SampleListener2实现JobListener{
@自动连线
数据源数据源;
@凌驾
public void beforeJob()引发异常{}
@凌驾
public void afterJob()引发异常{
JdbcTemplate JdbcTemplate=新的JdbcTemplate(数据源);
List objectList=new ArrayList();
Object[]objectArray={System.currentTimeMillis(),“作业后”,“作业后”,“1.0”};
添加(objectArray);
batchUpdate(“插入原始报告(日期、印象、点击次数、收益)值(?,,,?)”,objectList);
System.out.println(“作业2后”);
}
调试时,我发现Spring批处理没有提交事务,导致记录没有显示在DB中。如果我手动尝试提交事务,我可以通过DB中的记录找到
public class SampleListener2 implements JobListener {
@Autowired
DataSource dataSource;
@Inject
private PlatformTransactionManager transactionManager;
@Override
public void beforeJob() throws Exception {}
@Override
public void afterJob() throws Exception {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
List<Object[]> objectList = new ArrayList<Object[]>();
Object[] objectArray = {System.currentTimeMillis(), "Before Job", "Before Job", "1.0"};
objectList.add(objectArray);
jdbcTemplate.batchUpdate("insert into RAW_REPORT(DATE,IMPRESSIONS,CLICKS,EARNINGS) values (?,?, ?, ?)", objectList);
transactionManager.commit(status);
System.out.println("Before Job 1");
}
}
公共类SampleListener2实现JobListener{
@自动连线
数据源数据源;
@注入
私有平台transactionManager transactionManager;
@凌驾
public void beforeJob()引发异常{}
@凌驾
public void afterJob()引发异常{
JdbcTemplate JdbcTemplate=新的JdbcTemplate(数据源);
TransactionStatus状态=transactionManager.getTransaction(新的DefaultTransactionDefinition());
List objectList=new ArrayList();
Object[]objectArray={System.currentTimeMillis(),“作业前”,“作业前”,“1.0”};
添加(objectArray);
batchUpdate(“插入原始报告(日期、印象、点击次数、收益)值(?,,,?)”,objectList);
transactionManager.commit(状态);
System.out.println(“作业1前”);
}
}
有人能告诉我这个行为的细节吗?我不想手动处理事务,而是希望spring batch在侦听器中提交我的记录。请在这个问题上寻求您的帮助
编辑:
测试场景的示例代码:
您在哪里运行此应用程序?您的数据源和事务管理器是如何配置的?我正在作为一个独立的应用程序运行此应用程序。数据源和事务管理器已成功配置,各种回滚和提交场景已过测试。目前我正在使用mysql数据库,您可以找到SQL脚本和代码我在上面的编辑中提到的测试中使用了