zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    获取 鼠标 键盘 最后响应信息
    EF 6 for mysql
    Python中的OS模块。
    python中的随机函数random的用法示例random
    Python中OSI七层模型
    Pythoon中的面向对象三大特征
    Python中的函数(学习日记)
    Python的6种运算符(日记)
    计算机的发展史
    osi七层
  • 原文地址:https://www.cnblogs.com/pogusanqian/p/12908793.html
Copyright © 2011-2022 走看看