zoukankan      html  css  js  c++  java
  • SpringMVC 手动控制事务提交

    描述

           事务还是一个比较好的东东,有了这个,我们在做流程性的东西的时候,就会很好,很nice。

    现在看看 SpringMVC 如何实现的,详细请看代码:

    1、配置文件 applicationContext.xml:

    <bean id="txManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
    p:dataSource-ref="dataSource"/>

    2、在需要加事务的方法上加上

    DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) ctx
    .getBean("txManager");
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
    TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
    try {
    //逻辑代码,可以写上你的逻辑处理代码
    transactionManager.commit(status);
    } catch (Exception e) {
    transactionManager.rollback(status);
    }

    这是在有 ApplicationContext 的情况下、

    3. ApplicationContext 不存在的情况下

        @Autowired

        private DataSourceTransactionManager txManager;

       DefaultTransactionDefinition def = new DefaultTransactionDefinition();

       def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);// 事物隔离级别,开启新事务

       TransactionStatus status = txManager.getTransaction(def); // 获得事务状态

    try{
    //逻辑代码,可以写上你的逻辑处理代码
    txManager.commit(status);
    }catch(Exception e){
    txManager.rollback(status);
    }

    3. Spring声明式事务配置

              

    <!-- 事务配置 spring 3.0 -->

    <beanid="transactionManager class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

    <propertyname="dataSource"ref="dataSource"/>

    </bean>

    <aop:config>

    <aop:pointcutexpression="execution(public * com.*.service.impl.*Impl.*(..))"id="pointcut"/>

    <aop:advisoradvice-ref="txAdvice"pointcut-ref="pointcut"/>

    </aop:config>

    <tx:adviceid="txAdvice"transaction-manager="transactionManager">

    <tx:attributes>

    <tx:methodname="query*"propagation="REQUIRED"read-only="true"/>

    <tx:methodname="find*"propagation="REQUIRED"read-only="true"/>

    <tx:methodname="get*"propagation="REQUIRED"read-only="true"/>

    <tx:methodname="save*"propagation="REQUIRED"/>

    <tx:methodname="add*"propagation="REQUIRED"/>

    <tx:methodname="create*"propagation="REQUIRED"/>

    <tx:methodname="delete*"propagation="REQUIRED"/>

    <tx:methodname="del*"propagation="REQUIRED"/>

    <tx:methodname="remove*"propagation="REQUIRED"/>

    <tx:methodname="modify*"propagation="REQUIRED"/>

    <tx:methodname="update*"propagation="REQUIRED"/>

    <tx:methodname="clear*"propagation="REQUIRED"/>

    </tx:attributes>

    </tx:advice>

  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/ruiati/p/6027277.html
Copyright © 2011-2022 走看看