【发布时间】:2019-02-09 12:53:47
【问题描述】:
我必须将数据保存到 2 个不同的表中。我需要它是全有或全无的交易。如果第二个事务失败,如何回滚第一个事务?
在下面的代码中,我storeToTable1(),storeToTable2()都是按这个顺序执行的。
如果 storeToTable2() 失败,我希望 storeToTable1() 回滚。
配置类:
class StoreToDBConfig {
@Bean
public IntegrationFlow receiveMessage() {
return IntegrationFlows
.from("inputChannel")
.transform("convertToTable1Format")
.handle(ServicetoDBAdaptor,"storeToTable1")
.transform("convertToTable2Format")
.handle(ServicetoDBAdaptor,"storeToTable2")
.get();
}
}
数据库适配器服务:
class ServicetoDBAdaptor {
@Autowired
UserExecutionDetail userExecutionDetail;
@Autowired
UserExecution userExecution;
@Autowired
UserExecutionDetailRepository userExecutionDetailRepository;
@Autowired
UserExecutionRepository userExecutionRepository;
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void storeToTable1(Message<UserExecutionDetail> msg) throws Exception {
userExecutionDetailRepository.save(msg.getPayload());
}
@Transactional(propagation=Propagation.REQUIRED)
@ServiceActivator
private void storeToTable2(Message<UserExecution> msg) throws Exception {
userExecutionRepository.save(msg.getPayload());
}
}
【问题讨论】:
标签: transactions spring-data-jpa spring-integration