将RxJava 1.1.5与Spring引导事务一起使用不会回滚

将RxJava 1.1.5与Spring引导事务一起使用不会回滚,java,spring,spring-boot,rx-java,spring-transactions,Java,Spring,Spring Boot,Rx Java,Spring Transactions,我的应用程序使用RXJava1.1.5和SpringBoot1.3.5 我们有一个巨大的方法在一个事务中对数据库进行多次插入和更新,如下所示。当任何存储库方法抛出一个DataException(是RuntimeException)时,事务就不会被回滚,我可以在DB中获取记录 CodeService.java @Transactional(rollbackFor=DataException.class) Public Observable<Optional<Boolean>

我的应用程序使用RXJava1.1.5和SpringBoot1.3.5

我们有一个巨大的方法在一个事务中对数据库进行多次插入和更新,如下所示。当任何存储库方法抛出一个DataException(是RuntimeException)时,事务就不会被回滚,我可以在DB中获取记录

CodeService.java

@Transactional(rollbackFor=DataException.class)
   Public Observable<Optional<Boolean>> doProcess(req1,req2,req3,req4){
           return Observable.zip(repository1.insertRecord1(req1.get(),useFallBack),
                                 repository1.insertRecord2(req2.get(),useFallBack),
                                 repository1.getJRecord(req3.getAccountId(),req4.getId(),useFallBack),
                                 repository1.getTaxRate(req3.getAccountId(),useFallBack),
                                 repository1.getCurrencyByCode(req3.getCurrencyCode(), useFallBack),
                                   (record1,record2,jRecord,raxRate, currencyOp)->{
                                       BigDecimal amountWithoutTax = req4.getAmount().divide(raxRate.get(), currencyOp.get().getDecimalPlaces(), BigDecimal.ROUND_HALF_UP);
                                       Record3 record3= new Record3();
                                       BigDecimal chargeJournalKey = req4.getId();
                                       record3.setKey(record2.get());
                                       record3.setCollectionKey(record1.get());
                                       record3.setAmount(jRecord.get().getAmount().subtract(req4.getAmount()));
                                       record3.setAmount(amountWithoutTax);
                                       return repository1.insertRecord3(record3);
                                   });
                               }
public Observable<Optional<BigDecimal>> insertRecord1(req1.get(),useFallBack){..}

public Observable<Optional<BigDecimal>> insertRecord2(req2.get(),useFallBack){..}

public Observable<Optional<JRecord>> getJRecord(req3.getAccountId(),req4.getId(),useFallBack){..}

public Observable<Optional<BigDecimal>> getTaxRate(req3.getAccountId(),useFallBack){..}

public Observable<Optional<Currency>> getCurrencyByCode(req3.getCurrencyCode(), useFallBack){..}
在服务层使用RxJava时,Spring是否有可能不支持事务,因为当方法在observable订阅后从服务层返回时,会发生存储库调用

等待答复


感谢

Spriung 5.2中添加了反应性事务支持,并且仅针对项目反应器(afaik)。早期版本没有事务支持。因此,在您的情况下,不支持反应式事务。@M.Deinum,Spring 5.2是否支持RxJava Observable?是的,但不支持事务性支持afaik。函数需要返回Publisher以获得支持