disconf使用中的问题


一. disconfclient的使用demo

https://github.com/Lin-lemon/disconf-demo


二. disconfweb

1. MailBean中配置的邮件不支持ssl,修改mailsender到配置文件中,给javaMailProperties赋值
    
        
        
        
        

        
            
                true
                javax.net.ssl.SSLSocketFactory
            
        
    

2.更新配置文件时,整个在一个事务中,包括发送邮件,由于开始时邮件配置有问题且没有超时时间,这里的事务一直无法提交,导致更新失败。
    @Override
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    public String updateItemValue(Long configId, String value) {

        Config config = getConfigById(configId);
        String oldValue = config.getValue();

        //
        // 配置数据库的值 encode to db
        //
        configDao.updateValue(configId, CodeUtils.utf8ToUnicode(value));
        configHistoryMgr.createOne(configId, oldValue, CodeUtils.utf8ToUnicode(value));

        //
        // 发送邮件通知
        //
        String toEmails = appMgr.getEmails(config.getAppId());

        if (applicationPropertyConfig.isEmailMonitorOn()) {
            boolean isSendSuccess = logMailBean.sendHtmlEmail(toEmails,
                    " config update", DiffUtils.getDiff(CodeUtils.unicodeToUtf8(oldValue),
                            value,
                            config.toString(),
                            getConfigUrlHtml(config)));
            if (isSendSuccess) {
                return "修改成功,邮件通知成功";
            } else {
                return "修改成功,邮件发送失败,请检查邮箱配置";
            }
        }

        return "修改成功";
    }

  实际上发送邮件耗时较长,失败也不影响配置文件的更新,不应该占着数据库连接并影响事务提交。事务应该尽可能小,修改之后如下。
    @Override
    public String updateItemValue(Long configId, String value) {

        Config config = getConfigById(configId);
        String oldValue = config.getValue();

        // 更新数据库中配置文件
        updateItemValue(configId,value,oldValue);

        //
        // 发送邮件通知
        //
        String toEmails = appMgr.getEmails(config.getAppId());

        if (applicationPropertyConfig.isEmailMonitorOn()) {
            boolean isSendSuccess = logMailBean.sendHtmlEmail(toEmails,
                    " config update", DiffUtils.getDiff(CodeUtils.unicodeToUtf8(oldValue),
                            value,
                            config.toString(),
                            getConfigUrlHtml(config)));
            if (isSendSuccess) {
                return "修改成功,邮件通知成功";
            } else {
                return "修改成功,邮件发送失败,请检查邮箱配置";
            }
        }

        return "修改成功";
    }

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = RuntimeException.class)
    private void updateItemValue(Long configId, String value, String oldValue) {
        //
        // 配置数据库的值 encode to db
        //
        configDao.updateValue(configId, CodeUtils.utf8ToUnicode(value));
        configHistoryMgr.createOne(configId, oldValue, CodeUtils.utf8ToUnicode(value));
    }






你可能感兴趣的:(disconf)