nacos配置服务源码解析之添加配置

1.可以发现接口路径是:/v1/cs/configs
2.可以看到standalone模式下数据库使用的是derby(java语言编写的内嵌数据库,遵循jdbc和sql标准)
在这里插入图片描述
3.通过源码发现,添加配置的时候并没有直接将配置数据放到数据库,而是先放到SQL_CONTEXT ,

private static final ThreadLocal<ArrayList<ModifyRequest>> SQL_CONTEXT = ThreadLocal.withInitial(ArrayList::new);

最后再遍历SQL_CONTEXT 通过jdbcTemplate来执行sql

  default Boolean update(TransactionTemplate transactionTemplate, JdbcTemplate jdbcTemplate,
            List<ModifyRequest> contexts, BiConsumer<Boolean, Throwable> consumer) {
        return transactionTemplate.execute(status -> {
            String[] errSql = new String[] {null};
            Object[][] args = new Object[][] {null};
            try {
                contexts.forEach(pair -> {
                    errSql[0] = pair.getSql();
                    args[0] = pair.getArgs();
                    LoggerUtils.printIfDebugEnabled(LogUtil.DEFAULT_LOG, "current sql : {}", errSql[0]);
                    LoggerUtils.printIfDebugEnabled(LogUtil.DEFAULT_LOG, "current args : {}", args[0]);
                    jdbcTemplate.update(pair.getSql(), pair.getArgs());
                });
                if (consumer != null) {
                    consumer.accept(Boolean.TRUE, null);
                }
                return Boolean.TRUE;
            } catch (BadSqlGrammarException | DataIntegrityViolationException e) {
                FATAL_LOG.error("[db-error] sql : {}, args : {}, error : {}", errSql[0], args[0], e.toString());
                if (consumer != null) {
                    consumer.accept(Boolean.FALSE, e);
                }
                return Boolean.FALSE;
            } catch (CannotGetJdbcConnectionException e) {
                FATAL_LOG.error("[db-error] sql : {}, args : {}, error : {}", errSql[0], args[0], e.toString());
                throw e;
            } catch (DataAccessException e) {
                FATAL_LOG.error("[db-error] DataAccessException sql : {}, args : {}, error : {}", errSql[0], args[0],
                        ExceptionUtil.getAllExceptionMsg(e));
                throw e;
            }
        });
    }

4.添加配置的时候,执行了下面的几条sql

 final String sql =
                "INSERT INTO config_info(id, data_id, group_id, tenant_id, app_name, content, md5, src_ip, src_user, gmt_create,"
                        + "gmt_modified, c_desc, c_use, effect, type, c_schema) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        final String sql = "INSERT INTO his_config_info (id,data_id,group_id,tenant_id,app_name,content,md5,"
                + "src_ip,src_user,gmt_modified,op_type) VALUES(?,?,?,?,?,?,?,?,?,?,?)";

config_info是配置信息表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那年的夏天123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值