回滚从调用方法抛出的RuntimeException时,基础方法中的查询不会回滚,该方法被注释为@Transactional

时间:2018-10-25 09:21:09

标签: java spring-boot rollback transactional

这是API端点方法-

@Path("endpoint")
    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    @Transactional
    public List<UserTransaction> cashoutWithFee(@BeanParam XAmount amount, @FormParam("to") String to,
            @FormParam("account") String account) Boolean consent, @Context SecurityContext security)
                    throws NetCardException {

..  Some logic here..

UserTransaction feeTx = session.as(user).withdrawalFee(feeAmount,amount.asAmount());

                List<UserTransaction> myList = new ArrayList<UserTransaction>();
                myList.add(feeTx);

                if(feeTx.getStatus() == TransactionStatus.SUCCESSFUL)
                {

UserTransaction utx = session.as(user).withdrawOwnBank(amount.asAmount(), to,
                            account == null ? null : account.trim(),
                            ifsc == null ? null : ifsc.trim());

                    myList.add(utx);

                    String parentTxnId = utx.getId();

throw new RuntimeException("simulating withdrawal failure");
..  Some more logic here..
}

另一个类中的withdrawalFee()方法将调用其他方法,依此类推。它会在某些时候执行一些数据库插入查询。

withdrawOwnBank()方法类似地执行一些数据库插入和某些外部API调用。

即使发生运行时异常(在此处进行硬编码),我也看不到插入的查询被删除。有什么指向我想念的东西吗?我是Spring Boot的事务功能的新手。

0 个答案:

没有答案