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。会带后缀名!!

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值