spring cloud alibaba 使用nacos 共享配置文件讀取

首先說明版本,我使用的spring cloud alibaba是較新的版本,遇到一些問題網上很難找到對應的解答。

版本:

spring boot、spring cloud alibaba以及使用的依賴的版本(可以略過)

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <java.version>1.8</java.version>
        <alibaba-spring-cloud.version>2.2.0.RELEASE</alibaba-spring-cloud.version>
        <discovery.version>6.0.1</discovery.version>
        <alibaba-nacos.version>2.1.0.RELEASE</alibaba-nacos.version>
        <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
        <spring.redission.version>3.12.5</spring.redission.version>
        <swagger.version>2.9.2</swagger.version>
        <spring-boot.mybatis>2.1.2</spring-boot.mybatis>
        <alibaba.druid>1.0.16</alibaba.druid>
    </properties>
        <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>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba-spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.nepxion</groupId>
                <artifactId>discovery-plugin-starter-nacos</artifactId>
                <version>${discovery.version}</version>
            </dependency>
            <dependency>
                <groupId>com.nepxion</groupId>
                <artifactId>discovery-plugin-strategy-starter-service</artifactId>
                <version>${discovery.version}</version>
            </dependency>
            <dependency>
                <groupId>com.nepxion</groupId>
                <artifactId>discovery-plugin-config-center-starter-nacos</artifactId>
                <version>${discovery.version}</version>
            </dependency>
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${spring.redission.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${spring-boot.mybatis}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${alibaba.druid}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

目標1:使用nacos實現讀取配置

nacos和服務相關配置:

server:
    port: 41111
    servlet:
        context-path: /customer
spring:
    application:
        name: yuyang-customer
    cloud:
        nacos:
            config:
                group: applications
                file-extension: yml
                encode: UTF-8
                refresh-enabled: true
                config-retry-time: 3
    profiles:
        active: dev

接下來我們看一下nacos配置中心的配置文件有哪些

通過nacos配置讀取規則=dataId-group.後綴的方式,我們知道這個配置是可以被讀取到的,下圖可以說明配置是正常可以讀取到的

 

總結:nacos作爲配置中心讀取配置,規則還是比較簡單的。那麼問題來了:一般我們會將多個服務的公共配置存放到一個配置項裏,作爲多個服務公共的配置。

目標2:使用nacos實現多配值文件讀取

首先我們先在nacos控制檯添加一個公共的配置

你會發現有個比較不太和諧的groupId:yuyang.yml。是的沒錯,就是這麼噁心,不這麼寫,沒有辦法讀取到這個配置。這就是因爲shared-configs裏的dataId要求必須加後綴造成的。

配置裏的內容,都是些公共配置:

feign:
    httpclient:
        enabled: false
    okhttp:
        enabled: true
    sentinel:
        enabled: true
spring:
    application:
        strategy:
            sentinel:
                enabled: true
    cloud:
        sentinel:
            enabled: true
            transport:
                dashboard: xxxxx:xxx
                heartbeat-interval-ms: 5000
                port: 32223
            log:
                dir: \logs\sentinel\csp
                switch-pid: true
    redis:
        host: www.javaavaj.com
        lettuce:
            pool:
                max-active: 50
                max-idle: 11
                max-wait: 10000
        password: yuyang
        port: 31111
        timeout: 3000
    datasource:
        url: jdbc:mysql://xxxxx:xxx/scyuyang?useSSL=false&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&autoReconnect=true
        username: root
        password: yuyang
        maxActive: 100
        initialSize: 2
        minIdle: 8
        maxWait: 60000
        testOnBorrow: false
        testWhileIdle: true
        testOnReturn: false
management:
    endpoints:
        web:
            exposure:
                include: '*'

nacos中已經提供了共享配置的配置(有點繞),我們修改一下服務裏面的配置:

server:
    port: 41111
    servlet:
        context-path: /customer
spring:
    application:
        name: yuyang-customer
    cloud:
        nacos:
            config:
                group: applications
                file-extension: yml
                encode: UTF-8
                refresh-enabled: true
                config-retry-time: 3
                # 老版本shared-dataids 在這裏已經被廢棄
                shared-configs[0]:
                  # data-id要求必須有後綴名(這個要求很正常,但是配合配置中心一點也不好用)
                  data-id: yuyang.yml
                  group: applications
                  refresh: true
                
    profiles:
        active: dev

shared-configs 就是我們要配置的屬性,我們來看一下這個配置項的源碼類型,更清晰一些

@ConfigurationProperties("spring.cloud.nacos.config")
public class NacosConfigProperties {
    public static final String PREFIX = "spring.cloud.nacos.config";
    public static final String COMMAS = ",";
    public static final String SEPARATOR = "[,]";
    private static final Pattern PATTERN = Pattern.compile("-(\\w)");
    private static final Logger log = LoggerFactory.getLogger(NacosConfigProperties.class);
    @Autowired
    @JsonIgnore
    private Environment environment;
    private String serverAddr;
    private String encode;
    private String group = "DEFAULT_GROUP";
    private String prefix;
    private String fileExtension = "properties";
    private int timeout = 3000;
    private String maxRetry;
    private String configLongPollTimeout;
    private String configRetryTime;
    private boolean enableRemoteSyncConfig = false;
    private String endpoint;
    private String namespace;
    private String accessKey;
    private String secretKey;
    private String contextPath;
    private String clusterName;
    private String name;
    //就是他
    private List<NacosConfigProperties.Config> sharedConfigs;
    private List<NacosConfigProperties.Config> extensionConfigs;
......

 //靜態內部類
 public static class Config {
        private String dataId;
        private String group;
        //新版本新增的可以對共享的文件進行監聽配置刷新
        private boolean refresh;
 ......

啓動項目:

再看一下nacos這個公共配置是否被監聽到了

ok,以上就是nacos 共享配置的配置,一定要注意的是一下幾點:

  1. 項目中shared-configs的配置方式
  2. nacos控制檯中公共配置的dataId=shared-configs.dataId。會帶後綴名!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章