欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Spring的事务管理配置,

来源: javaer 分享于  点击 8609 次 点评:72

Spring的事务管理配置,


Spring事务的核心对象

​ spring提供了三大接口来实现事务的控制

使用Spring核心对象,采用编程式实现事务控制

​ 模拟转账业务,也是采用AOP的方法,为原始方法增强业务功能。

  • 原始方法

    /**
         * 
         * @param outName     出账用户名
         * @param inName      入账用户名
         * @param money       转账金额
         */
    public void transfer(String outName, String inName, Double money) {
        //执行业务
        accountDao.inMoney(outName, money);
        //模拟报错
        int i = 1 / 0;
        accountDao.outMoney(inName, money);
    }
    
  • 环绕通知

    public class TxAdvice {
    
        //数据源
        private DataSource dataSource;
    
        public void setDataSource(DataSource dataSource) {
            this.dataSource = dataSource;
        }
    
        /**
         * 环绕通知
         */
        public Object transactionManager(ProceedingJoinPoint pjp) throws Throwable {
            //创建事务
            PlatformTransactionManager dt = new DataSourceTransactionManager(dataSource);
    
            //创建事务定义对象
            TransactionDefinition td = new DefaultTransactionDefinition();
    
            //获取事务状态
            TransactionStatus ts = dt.getTransaction(td);
    
            //调用原始方法
            Object result = pjp.proceed(pjp.getArgs());
    
            //提交事务
            dt.commit(ts);
    
            return result;
        }
    }
    
  • 配置aop

    <!--配置事务bean-->
    <bean id="txAdvice" class="com.itheima.aop.TxAdvice">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--配置aop-->
    <aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pt" expression="execution(* *.*.transfer(..))"/>
        <!--配置切面,整合切入点和通知-->
        <aop:aspect ref="txAdvice">
            <!--环绕通知-->
            <aop:around method="transactionManager" pointcut-ref="pt"/>
        </aop:aspect>
    </aop:config>
    

声明式事务之XML配置

<tx:method>标签的属性

<tx:method
    name="*"
    read-only="false"
    timeout="-1"
    isolation="DEFAULT"
    no-rollback-for=""
    rollback-for=""
    propagation="REQUIRED" 
/>
  • name:待添加事务的方法名表达式(支持号通配符),例如get 、*
  • read-only:设置事务的读写属性,true为只读,false为读写。
  • timeout:设置事务的超时时长,单位秒
  • isolation:设置事务的隔离级别,该隔离级设定是基于Spring的设定,非数据库端。
  • no-rollback-for:设置事务中不回滚的异常,多个异常间使用逗号分割.
  • rollback-for:设置事务中的回滚异常,多个异常使用逗号分隔
  • propagation:设置事务的传播行为

声明式事务之注解配置

注解+XML

相关文章

    暂无相关文章
相关栏目:

用户点评