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;
    }

 

转载于:https://my.oschina.net/sprouting/blog/911241

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值