zoukankan      html  css  js  c++  java
  • spring+mybatis 手动开启和提交事务

    spring配置文件 

    事务控制管理器transactionManager
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
      </bean>
    
    <!-- 使用annotation定义事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

    示例java代码 

    // 保存信息
        public MessageTpl saveMessage(Map<String, Object> mqInfo, Message message) throws Exception{
            // 保存信息
            //获取Spring容器的对象

          ClassPathXmlApplicationContext contextLoader = new ClassPathXmlApplicationContext(
              new String[] { "classpath*:spring/applicationContext.xml", "classpath*:spring/spring-mybatis.xml"});

    //1.获取事务控制管理器
            DataSourceTransactionManager transactionManager = contextLoader.getBean(
            "transactionManager", DataSourceTransactionManager.class);
            //2.获取事务定义
            DefaultTransactionDefinition def = new DefaultTransactionDefinition();
            //3.设置事务隔离级别,开启新事务
            def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            //4.获得事务状态
            TransactionStatus transactionStatus = transactionManager.getTransaction(def);
            MessageTpl messageTpl = null;
            try {
                Date time = new Date();
                String status = Constant.MESSAGE_STATUS_TO_BE_CONFIRMED;
                String remark = "optId:"+mqInfo.get("userId")+"|预发布:待确认";
                if (Constant.MQ_IS_CONFIRM_NO == (Integer) mqInfo.get("isConfirm")) {
                    status = Constant.MESSAGE_STATUS_TO_BE_SEND;
                    remark = "optId:"+mqInfo.get("userId")+"|待发送:消息不需要确认";
                }
    
                messageTpl = new MessageTpl((Long) mqInfo.get("mqId"), message.getContent(), 0,
                        (Long) mqInfo.get("userId"), status, time, time, Constant.MSG_TABLE + message.getQueueName(),
                        MD5Util.MD5_32(message.getContent()));
                messageDao.saveMessage(messageTpl);
                // TODO添加缓存
                // 保存日志
                MessageLogTpl log = new MessageLogTpl(null, "预发布", status, remark, time,
                        Constant.MSG_LOG_TABLE + message.getQueueName());
                this.messageDao.saveMessageLog(log);
                
            } catch (Exception e) {
                transactionManager.rollback(transactionStatus);
                messageTpl = null;
                logger.error("saveMessage_Exception ", e);
            }finally {     
                transactionManager.commit(transactionStatus); 
            } 
            return messageTpl;
        }
  • 相关阅读:
    Linux Ubuntu 忘记用户名和密码 解决办法
    C语言中标准输入流、标准输出流、标准错误输出流
    递归实现字符串反转char* reverse(char* str)合集
    (转)最好的求平方根的方法(精确度VS速度)Best Square Root Method Algorithm Function (Precision VS Speed)
    java验证码识别4
    互聯網產品設計主題詞表
    java验证码识别3
    C++实现C#的get,set属性操作
    简陋,山寨,Everything,桌面搜索,原理,源码
    java验证码识别1
  • 原文地址:https://www.cnblogs.com/xujishou/p/6210012.html
Copyright © 2011-2022 走看看