1.配置事务管理器
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
2.配置事务的通知
- a.此时我们需要导入事务的约束:tx名称和空间约束,同时也需要aop的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
- b.使用tx:advice标签配置事务通知
属性:
id
:给事务通知起一个唯一标识。
transaction-manager
:给事务通知提供一个事务管理器引用。
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager"></tx:advice>
3.配置AOP中通用的切入点表达式
<!--配置AOP-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="pt01" expression="execution(* net.togogo.service.impl.*.*(..))"/>
</aop:config>
4.建立事务通知和切入点表达式的对应关系
<!--配置AOP-->
<aop:config>
<!--配置切入点表达式-->
<aop:pointcut id="pt01" expression="execution(* net.togogo.service.impl.*.*(..))"/>
<!--建立切入点表达式和事务通知的对应关系-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt01"></aop:advisor>
</aop:config>
5.配置事务的属性:
-
是在事务的通知tx:advice标签的内部
isolation
:用于指定事务的隔离级别。默认值是DEFAULT,表示使用数据库的默认隔离级别。propagation
:用于指定事务的传播行为。默认值是REQUIRED,表示一定会有事务,增删改的选择。查询方法可以选择SUPPORTS。read-only
:用于指定事务是否只读。只有查询方法才能设置为true,默认值是false,表示读写。timeout
:用于指定事务的超时时间。默认值是-1,表示永不超时。如果设定了数值,以秒为单位。rollback-for
:用于指定一个异常,当产生该异常时,事务回滚。产生其他异常时,事务不回滚。没有默认值。表示任何异常都回滚。
no-rollback-for
:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,表示任何异常都回滚。
<!--配置事务的通知-->
<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>