spring中基于xml的声明式事务控制

spring中基于xml的声明式事务控制配置步骤

0. 导入依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>

1. xml版

1.1 配置事务管理器

1
2
3
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

1.2 配置事务通知和事务的属性

1
2
3
4
5
6
7
8
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--配置事务的属性-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="false"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

配置事务时的属性: <tx:method> 标签内

isolation用于指定事务的隔离级别。

  • DEFAULT:(默认值)表示使用数据库的默认隔离级别。
  • READ_UNCOMMITTED :读未提交,允许读取尚未提交的更改;可导致:脏读、幻读
    和不可重复读。
  • READ_COMMITTED:读已提交,允许从已经提交的并发事务读取;可以防止脏
    读,但是幻读和不可重复读仍有可能会发生。
  • REPEATABLE_READ:可重复读,对于相同字段的多次读取的结果是一致的,除非
    数据被当前事务本身改变;可防止脏读和不可重复读,但是
    幻读仍可能发生。
  • SERIALIZABLE:串读,完全遵循 ACID 的隔离级别,确保不发生:脏读、幻
    读和不可重复读;所有隔离级别中最慢,因为会锁定当前事
    务所涉及的数据表。

propagation用于指定事务的传播行为。

  • REQUIRED:(默认值)在有事务的状态下执行;如果当前没有事务,则
    创建新的事务。增删改的选择
  • SUPPORTS:如果当前有事务,则在当前事务状态下执行;如果当前没有事
    务,则在无事务状态下执行。
  • REQUIRES_NEW:创建新的事务,并在新的事务中执行方法;如果当前已有事务,
    则将当前事务挂起。
  • NOT_SUPPORTED:在没有事务的状态下执行;如果当前已有事务,则将当前事务
    挂起。
  • NEVER:在没有事务的状态下执行,如果当前已经存在事务,则抛出异
    常:IllegalTransactionStateException。
  • NESTED:如果没有一个已经定义的事务,则新创建一个事务,当前方法
    在新建的事务中执行;如果存在已经定义的事务,则当前方法
    在嵌套事务中执行;嵌套事务的 commit 和 rollback 不影响外
    层事务的继续执行。
  • MANDATORY:必须在已经添加事务的状态下执行,如果当前没有添加事务,
    则抛出异常 IllegalTransactionStateException。

read-only用于指定事务是否只读。只有查询方法才能设置为true。默认值是false,表示读写

timeout用于指定事务的超时时间,默认值是-1,表示永不超时。如果指定了数值,以秒为单位

rollback-for用于指定一个异常,当产生该异常时,事务回滚,产生其他异常时,事务不回滚。 没有默认值,表示任何异常都回滚。

no-rollback-for用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。 没有默认值,表示任何异常都回滚。

1.3 配置aop

1
2
3
4
5
6
7
<!--配置aop-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="pt1" expression="execution(* com.xzxj.service.impl.*.*(..))"/>
<!--建立切入点表达式和事务通知的对应关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>

2. 注解版

  • Copyrights © 2020-2023 夕子学姐
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信