• Spring事务的两种方式


    1.适合中小型项目

    第一:在pom.xml中添加:

    <!-- spring 依赖-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- Spring事务用到的-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.5.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.5.RELEASE</version>
    </dependency>

    第二:在applicationContext.xml文件里面添加:
    <!--使用spring的事务处理-->
    <!--1.声明事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--连接数据库,指定数据源-->
    <property name="dataSource" ref="MyDataSource"></property>
    </bean>
    <!--2.开启事务注解驱动,告诉spring使用注解管理事务,创建代理对象;适合中小型项目-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
    第三:最后在主方法上增加@Transactional

    ==========================================================================================================================================================

    ==========================================================================================================================================================

    2.适合大型项目的事务,只有以下两个步骤

     第一,在在pom.xml中添加:

    <!-- aspectj 依赖-->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>5.2.5.RELEASE</version>
    </dependency>
    第二:在applicationContext.xml文件里面添加:
    <!--声明式事务处理,和源代码完全分离-->
    <!--1.声明事务管理对象-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="MyDataSource"></property>
    </bean>
    <!--2.声明业务方法的事务属性(隔离级别、传播行为、超时时间)
    id是自定义名称,表示配置内容
    transaction-manager:事务管理器对象的ID-->
    <tx:advice id="myAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <!--tx:method:给具体的方法配置事务属性,method可以有多个,给不同的方法配置事务属性
    name:方法名,1)完整的方法名,不带包和类;2)可以使用通配符*,表示任意字符
    propagation:传播行为,枚举值
    isolation:隔离级别
    rollback-for:指定的异常类名,全限定类名,发生异常,一定回滚
    -->
    <tx:method name="buy" isolation="DEFAULT" propagation="REQUIRED"
    rollback-for="java.lang.NullPointerException,com.ykh.excep.NotEnoughException"/>

    <!--使用通配符,指定很多方法-->
    <!--指定新增方法-->
    <tx:method name="add*" propagation="REQUIRES_NEW"></tx:method>
    <!--指定修改方法-->
    <tx:method name="modify*"></tx:method>
    <!--指定删除方法-->
    <tx:method name="remove*"></tx:method>
    <!--查询方法,querysearchfind方法等-->
    <tx:method name="*" propagation="SUPPORTS" read-only="true"></tx:method>
    </tx:attributes>
    </tx:advice>

    <aop:config>
    <!--3.配置切入点表达式,指定哪些包里面的哪些类需要使用事务
    id:切入点表达式的名称,唯一值
    expression:切入点表达式,指定哪些包哪些类哪些方法要使用事务,aspectj会创建代理对象-->
    <aop:pointcut id="servicePt" expression="execution(* *..service..*.*(..))"/>

    <!--配置增强器:关联advicepointcut
    advice-ref:通知,上面的tx:advice的配置
    pointcut-ref:切入点表达式的id
    -->
    <aop:advisor advice-ref="myAdvice" pointcut-ref="servicePt"></aop:advisor>
    </aop:config>


  • 相关阅读:
    AcWing 243. 一个简单的整数问题2 (树状数组)打卡
    AcWing 241. 楼兰图腾 (树状数组)打卡
    AcWing 233. 换教室 (期望DP+floyd)打卡
    AcWing 234. 放弃测试 (01分数规划)打卡
    AcWing 232. 守卫者的挑战 (期望DP)打卡
    AcWing 231. 天码 (容斥)打卡
    AcWing 230. 排列计数 水题(组合数+错排)打卡
    AcWing 229. 新NIM游戏 (线性基+博弈论)打卡
    AcWing 228. 异或 (dfs+线性基)打卡
    pstStream->pstPack[i].pu8Addr详解
  • 原文地址:https://www.cnblogs.com/zbliao/p/14019142.html
Copyright © 2020-2023  润新知