zoukankan      html  css  js  c++  java
  • spring事务手动回滚

    @Transactional(rollbackFor = { Exception.class })
    public JSONObject preSendMsg(AuthInfo authInfo, Message message) {
            JSONObject jsonObject = new ResultJSONObject("000", "消息预发送成功");
            try {
                // 判断参数有效性
                if (null == authInfo || StringUtil.isEmpty(authInfo.getUsername()) || StringUtil.isEmpty(authInfo.getPassword())
                        || null == message || StringUtil.isEmpty(message.getQueueName())
                        || StringUtil.isEmpty(message.getExchange()) || StringUtil.isEmpty(message.getContent())) {
                    return new ResultJSONObject("001", "重要参数不可为空!");
                }
                // 检查消息操作的权限信息
                // 检查队列配置是否存在 1
                JSONObject checkAuthJson = this.checkAuthInfo(authInfo, message.getQueueName());
                if (!"000".equals((String) checkAuthJson.get("resultCode"))) {
                    return checkAuthJson;
                }
                Map<String, Object> mqInfo = checkAuthJson.getJSONObject("mqInfo");
    
                // 检查消息的发送频率,控制流速...TODO
                // 消息去重,相同消息返回相同的msgId 2
                if (!chechMsgUnique(mqInfo, message)) {
                    return new ResultJSONObject("021", "消息内容重复!");
                }
                // 保存消息 3
                MessageTpl messageTpl = saveMessage(mqInfo, message);
                if(null==messageTpl){
                    return new ResultJSONObject("031", "消息保存失败!");
                }
                jsonObject.put("msgId", messageTpl.getMsgId().toString());
            } catch (Exception e) {
                logger.error("preSendMsg_Exception ", e);
                jsonObject=new ResultJSONObject("preSendMsg_Exception", "消息预发送异常");
                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动开启事务回滚
            }
            return jsonObject;
        }
  • 相关阅读:
    ubuntu 无法在终端切换输入法的解决办法
    c代码连接mysql数据库内存泄露的问题
    栈和堆的地址哪个高
    笔试题之union与struct
    笔试题之interface和abstract class之间的区别
    笔试题之C#struct
    c++单例模式的写法
    c++返回引用是否是真的引用
    operator = 为什么要返回*this的应用
    c++ new和delete操作符的重载
  • 原文地址:https://www.cnblogs.com/xujishou/p/6210289.html
Copyright © 2011-2022 走看看