<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
https://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
https://www.springframework.org/schema/context/spring-context.xsd">
//在前面的基础上新增的约束
//Spring基于xml配置声明式事物
//配置事务管理器
<bean id="transactionManager" class="DataSourceTransactionManager"//这里idea会自动联想出全路径>
<property name="dataSource" ref="dataSource"/>
//这里用之前配置好的dataSource标签
</bean>
//配置事物通知
<tx:advice id="txAdvice" transaction-manager="transactionManager">
//配置事物的属性
<tx:attributes>
//匹配需要加入事物的方法
//这里的方法是切入点表达式包含的方法,可以是具体的方法,也可以加*表示模糊的几个方法,也可以直接写*表示所有方法
//只有对增删改才需要开启事务
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="ture"/>
//isolation:指定事物的隔离级别(默认DEFAULT,指数据库的隔离级别)
//no-rollback-for:是否开启回滚,自定义一个异常,除了这个异常之外所有异常都不回滚,默认所有异常都回滚
//rollback-for:是否开启回滚,自定义一个异常,除了这个异常之外所有异常都回滚,默认所有异常都回滚
//propagation:指定事物的传播行为:是否开启事务以及以什么策略开启(默认REQUIRED,表示一定有事物(在增删改业务场景下使用)),SUPPORTS:如果有事物就使用事物,没有事物就不用事物(查询业务中使用)
//read-only:是否只读,默认为FALSE,在查询业务场景下开启只读
//timeout:设置超时时间,默认-1,表示永不超时,可以以秒为单位进行时间的设置
</tx:attributes>
</tx:advice>
//配置AOP
<aop:config>
//配置切入点表达式
<aop:pointcut id="pt01" expression="execution(* 包的位置.*.*(..))"/>//这里包的位置是service层的位置,所以对应的方法也是service中的方法,只有在同一个service方法中的操作才会被事物绑定在一起
//配置切入点和事物通知的对应关系
<aop:advisor advice-ref="txAdvice" point-ref="pt01"/>
</aop:config>
//junit提供的@Before:注解在测试类的方法上面,表示所有测试方法执行之前执行这个方法,与前置通知区别一下
//service-dao /dao-jdbcTemplate /jdbcTemplate-dataSource /datasource-数据库信息 /事务管理器-dataSource
//事物通知-事务管理器 /配置aop
//基于注解的事物(在业务层Service)
@Transactional() //申明在Service实现类上,可以修饰类可以修饰方法,修饰类表示该类所有的方法都会加入事物的支持,如果修饰方法,方法的优先级比类高,这意味着可以同时加这个注解,然后配置不同的属性
@Transactional(propagation=Propagation.REQUIRED,readOnly=false)
//在业务层要加@Service("AccountService")注解
//在Dao层要加@Repository注解
//在xml中开启对注解事物的支持(扫描包+事务管理器+支持)
<context:component-scan base-package="com.ygkj"/>
<bean id="transactionManager" class="DataSourceTransactionManager"//这里idea会自动联想出全路径>
<property name="dataSource" ref="dataSource"/>
//这里用之前配置好的dataSource标签
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
//配置jdbcTemplate和dataSource<bean>标签
//在各个层面注入数据