当前位置:   article > 正文

使用lambda表达式优雅你的事务代码

使用lambda表达式优雅你的事务代码

我们在实现业务逻辑时,经常会有这种需求:

1、在当前事务A中开启新事务B,事务B中发生异常不可以回滚A,事务B成功执行后返回事务B的返回值;

2、在当前事务A中开启新事务B,事务B中发生异常要求回滚A,事务B成功执行后返回事务B的返回值;

3、在当前事务A中开启新事务B,事务B中发生异常不可以回滚A,事务B成功执行后不需要返回;

4、在当前事务A中开启新事务B,事务B中发生异常要求回滚A,事务B成功执行后不需要返回;

5、注册后置事务B,即当前事务A成功提交后才会执行事务B,事务B异常的话不抛出,只打印异常日志;

6、注册后置事务B,即当前事务A异常时执行事务B,事务B异常的话不抛出,只打印异常日志;

 


一、配置事务模版

<!--事务模版
    1.标志REQUIRES_NEW会新开启事务,外层事务异常外部事务会会馆,不会回滚内部事务的提交
    2.标志REQUIRES_NEW的内部事务的异常,内部事务会回滚,外部事务也会回滚-->
    <bean id="transactionTemplateNew" class="org.springframework.transaction.support.TransactionTemplate">
        <property name="transactionManager">
            <ref bean="transactionManager"/>
        </property>
        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW"/>
    </bean>

 

二、定义接口

/**
 * @author zhaojiatao
 * @date 2019-07-14
 */
public interface ICommonTransactionService {

    /**
     * 开启一个新事务来执行函数,有返回值;与外部事务互相隔离,发生异常只回滚本事务,不会互相影响
     * @param action
     * @param <T>
     * @urn
     */
    <T> T newTransactionExecuteAndReturnWithOutThrowable(Supplier<T> action);

    /**
     * 开启一个新事务来执行函数,有返回值;内部事务发生异常时会向外抛出异常,内部事务和外部事务均回滚
     * @param action
     * @param <T>
     * @urn
     */
    <T> T newTransactionExecuteAndReturnThrowable(Supplier<T> action) throws Exception;

    /**
     * 开启一个新事务来执行函数,无返回值;与外部事务互相隔离,发生异常只回滚本事务,不会互相影响
     * @param f
     */
    void newTransactionRunVoidWithOutThrowable(Runnable f);

    /**
     * 开启一个新事务来执行函数,无返回值;内部事务发生异常时会向外抛出异常,内部事务和外部事务均回滚
     * @param f
     */
    void newTransactionRunVoidThrowable(Runnable f) throws Exception;



    /**
     * 如果当前存在事务,则等当前事务提交后,回头来开启一个新事务执行,如果内部捕捉异常,不往外抛出;如果外部事务提交前外部事物异常,则此函数不会被执行
     * https://docs.spring.io/spring/docs/1.2.7/javadoc-api/org/springframework/transaction/support/TransactionSynchronizationAdapter.html
     * @param f
  
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/949049
推荐阅读
相关标签
  

闽ICP备14008679号