声明式事务
实现声明式事务
配置声明式事务
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" //引用tx命名空间下的标签
xmlns:tx="http://www.springframework.org/schema/tx" //引用aop命名空间下的标签
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置数据源.......-->
<!--定义声明式事务-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置事务的增强-->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!--定义事务的规则-->
<tx:attributes>
<!--
propagation事务的传播机制
REQUIRED(默认值) 默认支持事务,如果当前方法需要事务,那么就支持事务
REQUIRES_NEW 、MANDATORY、NESTED
SUPPORTS 如果不需要事务,那么就不要支持事务
NOT_SUPPORTED、NEVER
-->
<tx:method name="find*" propagation="SUPPORTS"/>
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--定义一个事务的切面 注:那些类的那些方法进行事务执行-->
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* cn.kgc.service..*.*(..))"/>
<!--将定义好的事务增强和切点组合起来-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"></aop:advisor>
</aop:config>
</beans>
使用注解实现声明式事务
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" //引用tx命名空间下的标签
xmlns:tx="http://www.springframework.org/schema/tx" //引用aop命名空间下的标签
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置数据源.......-->
<!--定义声明式事务-->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--开启事务的注解-->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
使用
//此处为该类所有方法添加事务
@Transactional
public class TestTxManager(){
@Test
//指定方法添加事务
@Transactional(propagation = Propagation.SUPPORTS)
public void Test10(){
//测试
}
}
@Transactional的默认值
1.事务传播设置是.
2.事务隔离级别是
3.事务是 读/写
4.事务超时默认是依赖于事务系统的,或者事务超时没有被支持
5.任何RuntimeException将触发事务回滚,但是任何chceked Exception 将不触发事务回滚
属性 | 类型 | 说明 | 示例 |
---|---|---|---|
propagation | 枚举型:Propagation | 可选的传播性设置 | @Transactional(propagation = Propagation.SUPPORTS) |
isolation | 枚举型:Isolation | 可选的隔离性设置 | @Transactional(Isolation=Isolation.READ_COMMITTED) |
readOnly | 布尔型 | 是否为只读型事务 | @Transactional(readOnly=true) |
timeout | int(以秒为单位) | 事务超时 | @Transactional(timeout=10) |
rollbackFor | 一组Class类的实例,必须是Throwable子类 | 一组异常类,遇到时必须进行回滚 | @Transactional(rollbackFor ={SQLException.class}),多个异常可用英文逗号隔开 |
rollbackForClassName | 一组Class类的实例,必须是Throwable子类 | 一组异常类,遇到时必须进行回滚 | @Transactional(rollbackForClassName ={SQLException.class}),多个异常可用英文逗号隔开 |
noRollbackFor | 一组Class类的实例,必须是Throwable子类 | 一组异常类,遇到时必须不回滚 | |
noRollbackForClassName | 一组Class类的实例,必须是Throwable子类 | 一组异常类,遇到时必须不回滚 |