使用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>
<!--        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>

<!--        &lt;!&ndash; 读取bootstrap文件 &ndash;&gt;-->
<!--        <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();
    }
}

 

posted @ 2024-02-01 10:09  官萧何  阅读(2767)  评论(0)    收藏  举报