spring database transactional 事务配置

    本文仅为日常工作中的札记。记录日常工作中的知识点。

spring 配置文件

  1. 使用cglib的aop方式启动声明式事务
<!-- 数据源上的事务管理器  -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource" />
</bean>
<!-- 启动注解事务(声明式)模式,proxy-targ-class=true 启用cglib aop模式,transcation-manager配置指定的事务管理器 -->
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
  1. 使用aspectj的load time时aop方式启动声明式事务
    spring xml配置文件
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--  transaction-manager缺省值transactionManager -- >
<tx:annotation-driven mode="aspectj" />
    pom.xml文件中需引入spring-aspects
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.3.15.RELEASE</version>
</dependency>
  1. 使用aspectj的编译时aop方式启动声明式事务
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--  transaction-manager缺省值transactionManager -- >
<tx:annotation-driven mode="aspectj" />

pom.xml文件

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>4.3.15.RELEASE</version>
  <exclusions>
       <exclusion>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
       </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.8.9</version>
</dependency>
......
<!-- 在编译时,加入aop的编译  -->
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <version>1.9</version>
  <configuration>
      <source>1.8</source>
      <target>1.8</target>
      <complianceLevel>1.8</complianceLevel>
      <showWeaveInfo>true</showWeaveInfo>
      <aspectLibraries>
          <aspectLibrary>
              <groupId>org.springframework</groupId>
              <artifactId>spring-aspects</artifactId>
          </aspectLibrary>
      </aspectLibraries>
  </configuration>
  <executions>
      <execution>
          <goals>
              <goal>compile</goal>
              <goal>test-compile</goal>
          </goals>
      </execution>
  </executions>
</plugin>

注解@Transactional的使用

  1. @Transactional 注解最好仅放在需要事务的函数上。如果放在class上,类的所有public函数上均会启用事务。
  2. 注解放在interface上对于cglib、aspects基本无效。需放在concrete class上(抽象类上也可以)。
  3. 当函数抛出RuntimeException型的异常才会回滚事务。当需要检测型异常也回滚事务时在注解rollbackFor
    属性上指定

几种aop的事务间的区别

  1. cglib模式的aop事务。只有目标方法由外部调用,并且是public方法才生效
  2. aspects可以在非public和自调用上支持事务

参考资料
透彻的掌握 Spring 中@transactional 的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值