Transactions 使用JSR-352的JobListener将记录插入数据库

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

我试图在JobListener实现的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脚本和代码我在上面的编辑中提到的测试中使用了