【发布时间】:2020-09-07 14:46:26
【问题描述】:
事务未在春季批次中回滚。我故意抛出异常来测试事务回滚。即使项目写入器抛出异常,数据库事务也正在提交。下面是写入器中保存到数据库中的方法。 compEvent 对象是注入到此类中的 jpa 存储库
private void writeCEs(Map> agentMap) 抛出 FailedCompensationException, Exception { 对于(入口>代理:agentMap.entrySet()){ agent.getValue().stream().forEach((ce) -> { compEvent.save(ce); }); updateRecordFileStatus(agent.getKey()); //postToAccounting(agent.getKey(), agent.getValue()); } throw new Exception("正在测试 XA 回滚..."); }我尝试使用上述方法标记交易 @Transactional(传播 = Propagation.REQUIRES_NEW,rollbackFor = Exception.class) 它仍然在提交交易。我确定我错过了一些东西。任何帮助将不胜感激。
下面是我的批处理配置
@EnableBatchProcessing @EnableTransactionManagement @Configuration @ComponentScan({ "com.pm.*" }) 公共类 TrueBatchConfig 扩展 DefaultBatchConfigurer { @自动连线 私有 JobBuilderFactory 工作; @自动连线 私有 StepBuilderFactory 步骤; @自动连线 EventReader 阅读器; @自动连线 私有 EventProcessor 处理器; @自动连线 私人 EventWriter 作家; @豆角,扁豆 受保护的步骤 step1(ThreadPoolTaskExecutor 执行程序) { DefaultTransactionAttribute 属性 = new DefaultTransactionAttribute(); 属性.setPropagationBehavior(传播.REQUIRED.value()); 属性.setIsolationLevel(Isolation.DEFAULT.value()); 属性.setTimeout(30); 返回 steps.get("step1")., Map>>chunk(10).reader(reader) .processor(处理器).writer(writer).transactionAttribute(属性).build(); } @Bean(name = "firstBatchJob") 公共作业 job(@Qualifier("step1") Step step1) { 返回jobs.get("firstBatchJob").start(step1).build(); } }【问题讨论】:
-
您使用的是哪个事务管理器?你说
compEvent object is jpa repository所以看起来你正在使用JPA。在这种情况下,我希望您将 Spring Batch 配置为使用JpaTransactionManager作为您的步骤。是这样吗? -
是的,我正在使用 JpaTransactionManager
标签: spring transactions spring-batch