【发布时间】:2019-03-04 09:41:00
【问题描述】:
我正在使用 Spring Data Rest 和 Spring JPA。我有一种方法可以更新一个数据库表。
@Autowired InvoiceClient;
@Override
@Transactional
public String doBilling(String x){
//get date from TableOne
Bill bill = billsRepository.getBill(x);
if(bill.isPaid()){
generateInvoice();
}
bill.setPaymentDate(new Date());
return "SUCCESS";
}
generateInvoice 是从其他服务调用@Transactional 方法的非事务方法。
public void generateInvoice(){
invoiceClient.generateInvoice();//this is @Transactional, make changes in TableTwo
}
如果 generateInvoice 方法出现任何异常,整个事务将回滚。 现在我想再添加一种方法,其中包含账单编号列表。我在循环中调用 doBilling 方法对所有账单进行计费。
@Override
@Transactional(readOnly = false, rollbackFor = {Throwable.class}, propagation = Propagation.REQUIRED)
public String doBillingForAll(List<String> tx){
for(String x: tx){
doBilling(x);
}
}
但是现在,如果 doBilling 方法出现任何异常,所有 setPayment 方法都将回滚,但 generateInvoice 仍然存在。 我也想回滚 generateInvoice 。我该怎么做?
【问题讨论】:
标签: java spring spring-data-jpa spring-data-rest distributed-transactions