zoukankan      html  css  js  c++  java
  • 课时:5 使用注解实现声明式事务

    .1)使用注解实现声明式事务

      1.目标:通过事务 使以下方法 要么全部成功 要么全部失败

    public void addStudent(){
        //增加班级
        //增加学生
        //crud
    }

      2.导入相关的jar包

     <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
        <dependency>
          <groupId>aopalliance</groupId>
          <artifactId>aopalliance</artifactId>
          <version>1.0</version>
        </dependency>
    <!--mysql驱动包-->
    <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
        </dependency>
    <!--连接池使用数据源-->
    <dependency>
          <groupId>commons-dbcp</groupId>
          <artifactId>commons-dbcp</artifactId>
          <version>1.4</version>
        </dependency>
    <!--连接池-->
    <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
        <dependency>
          <groupId>commons-pool</groupId>
          <artifactId>commons-pool</artifactId>
          <version>1.6</version>
        </dependency>
    
    还有几个spring自带的
    spring-jdbc-4.3.9.RELEASE.jar
    spring-tx-4.3.9.RELEASE.jar

      3.编写配置文件

        3.1 增加事务tx的命名空间

    xmlns:tx="http://www.springframework.org/schema/tx"
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

        3.2 增加对事务的支持

     <tx:annotation-driven transaction-manager="txManager"/>

        3.2.1 配置事务管理器

     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>

          3.2.1.1 配置数据源相关

    <!--    配置数据库相关-事务-->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <!--        配置驱动包-->
            <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    <!--        配置连接地址-->
            <property name="url" value="jdbc:mysql://localhost:3306/ssm"></property>
    <!--        配置用户名-->
            <property name="username" value="root"></property>
    <!--        配置密码-->
            <property name="password" value="root"></property>
    <!--        最大连接时间-->
            <property name="maxActive" value="10"></property>
    <!--        最大空闲时间-->
            <property name="maxIdle" value="6"></property>
        </bean>

      4.将需要 成为事务的方法 前增加注解:

     @Transactional(readOnly = false,propagation = Propagation.REQUIRED)
        @Override
        public void addStudent(Student student) {
            iStudentDao.addStudent(new Student());
        }

        4.1 readOnly的详细说明

         4.2 propagation事务传播行为的详细说明

        4.2.1 @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)                                4.2.2@Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务                                                                 4.2.3@Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务  

        4.2.4@Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常

        4.2.5@Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)                               4.2.6@Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.

      5.Transactional注解的一些其他的属性

     

  • 相关阅读:
    Best Time to Buy and Sell Stock III
    Valid Palindrome
    Longest Substring Without Repeating Characters
    Copy List with Random Pointer
    Add Two Numbers
    Recover Binary Search Tree
    Anagrams
    ZigZag Conversion
    Merge k Sorted Lists
    Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/thisHBZ/p/12511496.html
Copyright © 2011-2022 走看看