声明式事务

4 篇文章 0 订阅
1 篇文章 0 订阅

实现声明式事务

配置声明式事务

<?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_NEWMANDATORYNESTED
                SUPPORTS  如果不需要事务,那么就不要支持事务
                NOT_SUPPORTEDNEVER
            -->
            <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)
timeoutint(以秒为单位)事务超时@Transactional(timeout=10)
rollbackFor一组Class类的实例,必须是Throwable子类一组异常类,遇到时必须进行回滚@Transactional(rollbackFor ={SQLException.class}),多个异常可用英文逗号隔开
rollbackForClassName一组Class类的实例,必须是Throwable子类一组异常类,遇到时必须进行回滚@Transactional(rollbackForClassName ={SQLException.class}),多个异常可用英文逗号隔开
noRollbackFor一组Class类的实例,必须是Throwable子类一组异常类,遇到时必须不回滚
noRollbackForClassName一组Class类的实例,必须是Throwable子类一组异常类,遇到时必须不回滚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值