Spring Boot中Nacos更新配置

标签: Springboot 分类: Java 创建时间:2020-06-01 09:19:14 更新时间:2024-11-15 10:49:43

1.前言

需求是这样的,如何通过代码的方式更新nacos配置中心中的配置呢?可以通过Nacos提供的OpenApi也可以使用java sdk,这篇文章,我就主要是使用java sdk实现配置的更新。

2.增加依赖

1
2
3
4
5
6
7

<!--nacos依赖,配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>

3.增加bootstrap.properties文件

1
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

4.编写application.yml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
app-name: lsmfhx

nacos:
config:
server-addr: 127.0.0.1:8848 #nacos的serverAdd配置
group: DEFAULT_GROUP #分组的配置
file-extension: json
data-id: route-list #data-id的配置

## Database configuration
spring:
application:
name: ${app-name}-phemsjava
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
ip: 127.0.0.1

server:
port: 7003

5.编写配置更新代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.bibichuan.phemsjava.config;

import com.alibaba.cloud.nacos.NacosConfigProperties;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.ConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class NacosRouteConfig implements CommandLineRunner {
private final static Logger logger= LoggerFactory.getLogger(NacosRouteConfig.class);

// 应用程序名称
@Value("${app-name}")
private String appName;

// nacos配置的id
@Value("${nacos.config.data-id}")
private String dataId;

// nacos配置的分组
@Value("${nacos.config.group}")
private String group;

@Autowired
NacosConfigProperties nacosConfigProperties;

@Override
public void run(String... args) throws Exception {
updateConfig();
}

/**
*
*/
public void updateConfig(){
try{
ConfigService configService = nacosConfigProperties.configServiceInstance();
String content = configService.getConfig(dataId, group, 5000);

JSONArray routes= JSON.parseArray(content);
String route_id=appName+"-bigdata";
boolean hasRoute=false;
// 获取是否
int c=routes.size();
for(int i=0;i<c;i++){
JSONObject jsonObject=(JSONObject)routes.get(i);
String id=jsonObject.getString("id");
if(id.equals(appName+"-bigdata")){
hasRoute=true;
}
}
if(!hasRoute){
content="{\n" +
" \"id\": \""+appName+"-phemsjava\",\n" +
" \"order\": 1,\n" +
" \"predicates\": [{\n" +
" \"args\": {\n" +
" \"pattern\": \"/"+appName+"/phemsjava/**\"\n" +
" },\n" +
" \"name\": \"Path\"\n" +
" }],\n" +
" \"filters\":[{\n" +
" \"name\":\"StripPrefix\",\n" +
" \"args\":{\n" +
" \"_genkey_0\":1\n" +
" }\n" +
" }],\n" +
" \"uri\": \"lb://"+appName+"-phemsjava\"\n" +
" }";
routes.add(JSONObject.parse(content));

// 更新路由
configService.publishConfig(dataId, group, JSONObject.toJSONString(routes));
}
}catch (Exception e){
logger.error("获取Nacos配置失败",e);
}
}
}

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。