mysql动态配置数据源_SpringBoot 动态配置数据源-进阶-可视化动态配置数据源-1

springboot-yml 配置编辑

节点配置:

slave:

datasource:

names: N1,N2

N1:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://XXXXXXXXXXX1

username: root

password:

type: com.alibaba.druid.pool.DruidDataSource

N2:

driver-class-name: com.mysql.jdbc.Driver

url: jdbc:mysql://XXXXXXXXXXX2

username: root

password:

type: com.alibaba.druid.pool.DruidDataSource

yaml-jar包:

org.yaml

snakeyaml

1.25

获取Yaml对象

private Yaml getYamlObject(){

DumperOptions dumperOptions = new DumperOptions();

dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);

dumperOptions.setDefaultScalarStyle(DumperOptions.ScalarStyle.PLAIN);

dumperOptions.setPrettyFlow(false);

Yaml yaml = new Yaml(dumperOptions);

return yaml;

}

配置一个新的节点

//DatabaseConfig{url,username,password}

private MapgetNodeMap(DatabaseConfig config) {

Map node = new LinkedHashMap<>();

node.put("driver-class-name","com.mysql.jdbc.Driver");

node.put("url",config.getUrl());

node.put("username",config.getUsername());

node.put("password",config.getPassword());

node.put("type","com.alibaba.druid.pool.DruidDataSource");returnnode;

}

获取配置文件对象(我的配置文件在jar同级config/ 下面)

yaml-load加载成Map ,获取并编辑后,yaml-dump 重新写回到文件

public void add(DatabaseConfig config){

//获取配置文件对象(我的配置文件在jar包同级目录/config/ 下面)

log.info("user.dir:{}",System.getProperty("user.dir"));

File dumpFile = new File(System.getProperty("user.dir")+"/config/application.yml");

JSONObject result = new JSONObject();

Yaml yaml = getYamlObject();Map map = null;

try {

map = (Map)yaml.load(new FileInputStream(dumpFile));

} catch (FileNotFoundException e) {

log.error("{}",e);

}

Map datasource = (Map) ((Map) map.get("slave")).get("datasource");

String[] names = ((String)datasource.get("names")).split(",");

if(StringUtil.contains(names,config.getName())){

//名称已经存在

return;

}

//追加names

if(names.length>0){

datasource.put("names",(String)datasource.get("names")+","+config.getName());

}else{

datasource.put("names", config.getName());

}

//获取新的Node

Map node = getNodeMap(config);

datasource.put(config.getName(),node);

try {

//写回到配置文件

yaml.dump(map, new OutputStreamWriter(new FileOutputStream(dumpFile)));

} catch (FileNotFoundException e) {

log.error("{}",e);

}

//添加成功

return;

}

编辑节点,删除节点同添加  操作Map对象后写回到Yml文件。

未完待续....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值