这是我的配置:
<batch:job id="myLoadJob">
<batch:step id="myLoadStep">
<batch:tasklet>
<batch:chunk reader="myItemReader"
writer="myItemWriter" commit-interval="1000">
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
问题是在一些提交之后,ItemReader的数据源连接被重置。
我正在探索的解决方案是让XA知道数据源。从Spring文档中我了解到Spring的默认PlatformTransactionManager将把事务处理为全局。但是在阅读了这篇https://spring.io/blog/2011/08/15/configuring-spring-and-jta-without-full-java-ee/之后我很困惑,因为它说我必须使用这个注释:
tx:annotation-driven transaction-manager =“platformTransactionManagerReference”
并将该方法注释为Transactional - 示例: @Transactional public void work(){ //如果事务将被回滚 //方法抛出异常,否则提交 }
我正在寻找一些清晰度。
谢谢 @Kayaman - 希望以下澄清帮助
确切的事件如下:读者完成阅读并填充对象作者开始分批编写。在一定数量的写入之后抛出异常: 引起:com.microsoft.sqlserver.jdbc.SQLServerException:连接重置
此连接属于Reader的连接。希望这澄清一下。另一篇文章Using 2 different datasources : Spring batch描述了一个类似的问题。答案推荐使用XA感知数据源的分布式事务