180-spring框架開啟事務的兩種方式


第一種:@Tancational注解開啟事務,注意這個注解只有方法public方法上才能有效

1)配置文件中配置事務管理器
    <!--聲明事務管理器,在內部負責提交事務 commit() ,回滾事務 rollback()-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <!--必須使用的屬性數據源 DataSource,有了這個,我們才知道對那個數據庫進行事物操作-->
        <property name="dataSource" ref="myDataSource" />
    </bean>

    <!--開啟事務注解驅動:告訴spring要支持@Transactional的使用-->
   <tx:annotation-driven transaction-manager="transactionManager" />

2)在方法上加上@Trancational注解
     @Transactional(
             propagation = Propagation.REQUIRED,
             isolation = Isolation.REPEATABLE_READ,
             timeout = 20,
             rollbackFor = {NullPointerException.class,NotEnoughException.class})
    public void tranca(){}

 第二種:使用AspectJ配置文件開啟事務

    <!--1.聲明事務管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="myDataSource" />
    </bean>

    <!--2.給相關方法添加上事務,advice其實就是通知,這里我們使用了aop面向切面-->
    <tx:advice id="myAdvic" transaction-manager="transactionManager">
         <!--
                 tx:method:指定給方法的事務屬性
                 name:方法的名稱,業務方法的名稱(1.完整的方法名稱,不帶參數;2.使用通配符的方法名稱,通配符是*)
                 isolation:隔離級別
                 propagation:傳播行為
                 rollback-for:發送異常時回滾。他的值是異常類的全限定名
        -->
        <tx:attributes>
           <!--給一個具體的方法添加事務-->
            <tx:method name="buy" isolation="DEFAULT" propagation="REQUIRED"
                       rollback-for="java.lang.NullPointerException,com.wkcto.excep.NotEnoughException"/>
            <!--給所有方法添加事務-->
            <tx:method name="add*" isolation="REPEATABLE_READ" propagation="REQUIRES_NEW" />
            <tx:method name="modify*" isolation="DEFAULT" propagation="REQUIRED" />
            <tx:method name="remove*" />
            <!--其他方法 queryXXX, findXXX, searchXXX-->
            <tx:method name="*" propagation="SUPPORTS" isolation="DEFAULT" read-only="true" />
        </tx:attributes>
    </tx:advice>

    <!--3.配置aop-->
    <aop:config>
        <!--設置切入點表達式:哪些類中的方法要使用事務
            id:自定義的表達式名稱
            expression:切入點表達式
            execution(* *..service..*.*(..)):表示所有service類中的所有方法
        -->
        <aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))"/>
        <!--配置增強器: 連接類和事務的方法 advice-ref: 通知的id;  pointcut-ref:切入點表達式的id -->
        <aop:advisor advice-ref="myAdvic" pointcut-ref="servicePt" />
    </aop:config>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM