使用nacos实现统一管理配置文件&配置修改实时生效
以下是测试项目信息
1.新增依赖(注意springboot+springCloud+nacos版本需要对应)
<properties>
<logback.version>1.1.7</logback.version>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties>
<logback.version>1.1.7</logback.version>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties>
<!-- nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.6.RELEASE</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<!-- <!– 读取bootstrap文件 –>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-bootstrap</artifactId>-->
<!-- </dependency>-->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
高版本需要引入 spring-cloud-starter-bootstrap 依赖 我这个版本不需要
2.创建配置文件

spring: profiles: active: dev cloud: nacos: discovery: server-addr: 10.100.10.104:8848 namespace: test group: gch_group config: group: gch_group server-addr: 10.100.10.104:8848 namespace: test prefix: application file-extension: yml name: application
在nacos服务器中创建 命名空间、组、配置文件



3.使用配置&修改配置文件动态生效
测试了两种获取配置数据的方式
1)使用@RefreshScope + @Value 的方式动态获取配置数据

2)使用 @ConfigurationProperties 全局配置(这里查资料说需要使用 @NacosConfigurationProperties(dataId = "my-config", autoRefreshed = true) 但是测试后发现@ConfigurationProperties也可应并且可以动态更新配置信息)
package com.mybatis.plus.config; import com.alibaba.nacos.api.config.annotation.NacosConfigurationProperties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; /** * @Description: 配置文件全部变量初始化 * @Author: gch * @Date: 2023/11/9 14:11 */ public class ApplicationProperties { @Data @ConfigurationProperties(prefix = "test") @Configuration public static class Test { public static String test1; public static String test2; public void setTest1(String test1) { Test.test1 = test1; } public void setTest2(String test2) { Test.test2 = test2; } } }

方案二,将配置全写在一个文件中
package com.mxny.uap.sdk.config; import com.mxny.uap.sdk.glossary.SystemType; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; /** * UAP动态配置 */ @RefreshScope @Configuration //@ConfigurationProperties public class DynamicConfig { //WEB端超时, 单位(秒) //默认为1800秒 private Long WEB_ACCESS_TOKEN_TIMEOUT; //默认14400秒(4小时) private Long WEB_REFRESH_TOKEN_TIMEOUT; //移动端超时, 单位(秒) //默认为1800秒 private Long APP_ACCESS_TOKEN_TIMEOUT; // 默认为30天(2592000秒) private Long APP_REFRESH_TOKEN_TIMEOUT; //uap上下文路径 private String UAP_CONTEXT_PATH; //JWT公钥 private String publicKey; //JWT私钥 private String privateKey; //JWT公钥 private String oauthPublicKey; //JWT私钥 private String oauthPrivateKey; //管理员电话号码,手机验证码登录时不作校验 private String adminPhone; public String getAdminPhone() { return adminPhone; } @Value("${uap.adminPhone:18108121391}") public void setAdminPhone(String adminPhone) { this.adminPhone = adminPhone; } /** * uap公钥 * @return */ public String getPublicKey() { return publicKey; } /** * uap公钥 * @param publicKey */ @Value("${uap.jwt.publicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCz4D01cJbbLdzUprznyrz4bueMWkLZNSBHuxXjynn4WnaELTidvA6280h7WHP+87iNmZAtvrmcEWGPCBvGrNRFzpqtN7c8h6E12SESVWjuF4VkH/tUN/F4UJLtNPEnsmmVAdarwn/c5RJqFVA2sFVlm6Zc2FV3QyPdrdMfa9AizwIDAQAB}") public void setPublicKey(String publicKey) { this.publicKey = publicKey; } /** * uap私钥 * @return */ public String getPrivateKey() { return privateKey; } /** * uap私钥 * @param privateKey */ @Value("${uap.jwt.privateKey:MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALPgPTVwltst3NSmvOfKvPhu54xaQtk1IEe7FePKefhadoQtOJ28DrbzSHtYc/7zuI2ZkC2+uZwRYY8IG8as1EXOmq03tzyHoTXZIRJVaO4XhWQf+1Q38XhQku008SeyaZUB1qvCf9zlEmoVUDawVWWbplzYVXdDI92t0x9r0CLPAgMBAAECgYEAqCPLc4G8MkOLsmfuG0njHOMmpIbXCAzmEMcr7hOdse517JYM3z0kEBYXwdzsCP0vnYVXRbuL6vxAUqBEvpFdlhMYDNeDbKlqfWbvAa2RP6stib4OWR85gYbssRn3kh4IY1VWn+GeSbc5ztjSVXKnRbS+ezd0OmXJqiKzPpQtNMECQQDylOWkFeKgegAEzMXM/9VjjgXFoNb8AJVT8QXj2/m4ndL17/n4YHOwbMo0PDy69NKKMDAG3EnTNKBL0xIq2NMhAkEAvdNkMoI7Cedd35xG5bqB+GxWvrZPZN/QHhmQiUGO/CvslHL7QKeit4auDi30g3aUKbo07w/WfxL/me6yJRkn7wJAcXAtv0C4vOCwV45GxWmxqR+GFXf0cN349ssUPQzmR24OdBHnrD22e/8zw5+Tqr3IIvUL0Hl9UHYgq7Sln0HL4QJBAKn0u3Axg5SRb04GyL9kpnt63IuyBRGnBdn9P5h0dwW2egJLlENGE/zHe808PgD6SRu3GS+1eXGa2/jBawSmKkcCQGxLhtbCa08GrcQOHNYrtSfKRn+hJRKvwAWK4K64OGC94spgtPX5H3Ks3QxUGBWAtdlP+OVugfIfZ3Esim+2xSA=}") public void setPrivateKey(String privateKey) { this.privateKey = privateKey; } /** * oauth公钥 * @return */ public String getOauthPublicKey() { return oauthPublicKey; } /** * oauth公钥 * @param oauthPublicKey */ @Value("${uap.jwt.oauth.publicKey:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpqlIgY4TaSkt/FrzKZR5lq5z3GM5LofUzJjw9/eAltMD9NDDSkBv2S6OzeQapLNiYa2OKTCEjI8r6aUMIC8uoqGIjqWFflgZu0lwDd20Ks4UiMiOYNysWomhTfva1RbXU8kW/ebllKacb6r9DD0xyjV3WSWvbVVymwXruiYsNwQIDAQAB}") public void setOauthPublicKey(String oauthPublicKey) { this.oauthPublicKey = oauthPublicKey; } /** * oauth私钥 * @return */ public String getOauthPrivateKey() { return oauthPrivateKey; } /** * oauth私钥 * @param oauthPrivateKey */ @Value("${uap.jwt.oauth.privateKey:MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKmqUiBjhNpKS38WvMplHmWrnPcYzkuh9TMmPD394CW0wP00MNKQG/ZLo7N5Bqks2JhrY4pMISMjyvppQwgLy6ioYiOpYV+WBm7SXAN3bQqzhSIyI5g3KxaiaFN+9rVFtdTyRb95uWUppxvqv0MPTHKNXdZJa9tVXKbBeu6Jiw3BAgMBAAECgYAC2lhTLxk2ynUGiA1Yoeam8wHKreIaJ3kGCSiOKkywlZ+BInWHtOCjfZYdGHXiNlzWA0hDNRCBlMJ+/3IfGoOsJVYzVaXWOCAjKiSvEGK4hzcx84UmWAofvUSRAhV1bWYRy/Vgz+EvLAUMqAf8eIg3pzSzhRSj5neCiZS1t57KmQJBANOynz7YZ6DIsIrIrVYlhrT2YGcaIBO5EW3BiPuLvrSSm93YAKLeusNwkhCdQ7uFv35uil+aRpZXAnGJJXGtfusCQQDNK+BxslmI532iNateqGgh7qkArQskuwPz/+6aE0P1JUSwQ8Bn0DMt8Z6CLBonenXdI6D81Jr+WJLeSjlzvXMDAkBV7glpzxmxUAUpMG/7qdvWFLPo5dfjaZnDfW2G/aB5V5FhKU6IzfPtZQJFMDDQK2ghf+k3CT5hxAu/3jWOwSflAkEAgX60Bo7e2/3f2cWuB+ya7O/JU1fktKYk9JgQbMbEGbIQDIB2rA9IfjMGLHrRdyFfytd2AJ3fxbD54btPT7G/KQJAOWyPCloR/HEX01tozvsIAzAqZHus0zWCvnOgBhitjAGkAYsAmECfktgBsrbdOBSJWPrSoQVtcnPajtaKHIhFXQ==}") public void setOauthPrivateKey(String oauthPrivateKey) { this.oauthPrivateKey = oauthPrivateKey; } /** * uap上下文路径 * @return */ public String getUapContextPath() { return UAP_CONTEXT_PATH; } /** * uap上下文路径 * @return */ @Value("${uap.contextPath:http://uap.minexiot.com}") public void setUapContextPath(String uapContextPath) { UAP_CONTEXT_PATH = uapContextPath; } /** * WEB端accessToken超时 * @return */ public Long getWebAccessTokenTimeout() { return WEB_ACCESS_TOKEN_TIMEOUT; } /** * WEB端accessToken超时 * @param webAccessTokenTimeout */ @Value("${uap.webAccessTokenTimeout:1800}") public void setWebAccessTokenTimeout(Long webAccessTokenTimeout) { WEB_ACCESS_TOKEN_TIMEOUT = webAccessTokenTimeout; } /** * WEB端refreshToken超时 * @return */ public Long getWebRefreshTokenTimeout() { return WEB_REFRESH_TOKEN_TIMEOUT; } /** * WEB端refreshToken超时 * @param webRefreshTokenTimeout */ @Value("${uap.webRefreshTokenTimeout:14400}") public void setWebRefreshTokenTimeout(Long webRefreshTokenTimeout) { WEB_REFRESH_TOKEN_TIMEOUT = webRefreshTokenTimeout; } /** * 移动端accessToken超时 * @return */ public Long getAppAccessTokenTimeout() { return APP_ACCESS_TOKEN_TIMEOUT; } /** * 移动端accessToken超时 * @param appAccessTokenTimeout */ @Value("${uap.appAccessTokenTimeout:3600}") public void setAppAccessTokenTimeout(Long appAccessTokenTimeout) { APP_ACCESS_TOKEN_TIMEOUT = appAccessTokenTimeout; } /** * 移动端refreshToken超时 * @return */ public Long getAppRefreshTokenTimeout() { return APP_REFRESH_TOKEN_TIMEOUT; } /** * 移动端refreshToken超时,默认一个月 * @param appRefreshTokenTimeout */ @Value("${uap.appRefreshTokenTimeout:2592000}") public void setAppRefreshTokenTimeout(Long appRefreshTokenTimeout) { APP_REFRESH_TOKEN_TIMEOUT = appRefreshTokenTimeout; } // ================================================================================= /** * 获取accessToken超时 * @param systemType * @return */ public Long getAccessTokenTimeout(Integer systemType){ return systemType.equals(SystemType.WEB.getCode()) ? getWebAccessTokenTimeout() : getAppAccessTokenTimeout(); } /** * 获取refreshToken超时 * @param systemType * @return */ public Long getRefreshTokenTimeout(Integer systemType){ return systemType.equals(SystemType.WEB.getCode()) ? getWebRefreshTokenTimeout() : getAppRefreshTokenTimeout(); } }
⎛⎝官萧何⎠⎞一只快乐的爪哇程序猿;邮箱:1570608034@qq.com

浙公网安备 33010602011771号