前言

老顾之前介绍过多个子项目如何设计配置文件,以及多环境下如何配置文件;小伙伴如果仔细想一下,之前的文章的解决方案还有有些问题。

第一:配置多环境还是比较麻烦,Maven插件配置麻烦

第二:配置信息暴露给了开发人员

第三:不能动态改变配置内容,如:生成环境中日志级别一般为warn,但如果线上报错了,需要排查问题,有时候是需要把日志级别调整一下;一般是需要把应用服务停止,改下日志级别后再启动应用服务;这种就比较麻烦,那能不能不需要重启服务的情况下,就能改变日志级别呢?

外置配置

老顾这里利用之前介绍过的nacos配置中心方案,小伙伴们就一步步跟着老顾的思路。首先我们是否可以利用nacos解决配置信息暴露的问题。

我们首先需要在POM文件中引入nacos的config依赖包。

com.alibaba.cloud
 
   
  
 spring-cloud-starter-alibaba-nacos-config

然后我们在项目配置文件bootstrap.yml,必须是bootstrap.yml文件哦。

spring:
 
   
  
  application:
 
   
  
    name: config-service
 
   
  
  cloud:
 
   
  
    #nacos相关配置
 
   
  
    nacos:
 
   
  
 #注册中心服务地址
 
   
  
      discovery:
 
   
  
        register-enabled: true
 
   
  
        server-addr: 127.0.0.1:8848
 
   
  
 #配置中心服务地址
 
   
  
      config:
 
   
  
        server-addr: 127.0.0.1:8848
 
   
  
        file-extension: yml

我们一般项目都会在application.yml中配置datasource数据源信息,以及redis分布式缓存的配置信息,如:

spring:
 
   
  
 datasource:
 
   
  
 name: rainbow
 
   
  
 url: jdbc:mysql://localhost:3306/rainbow
 
   
  
 username: root
 
   
  
 password: 123456
 
   
  
 redis: 
 
   
  
 database: 0
 
   
  
 host: localhost
 
   
  
 password: 
 
   
  
 port: 6379

我们会发现一些重要的配置信息暴露了出来,如:url链接地址,用户名,密码

如果我们通过application-dev.yml,application-sit.yml,application-uat.yml,application-prod.yml方式实现多环境;

那dev环境,sit环境,uat环境,prod环境都会暴露出来。

那我们有没有什么方法不让开发人员轻易发现信息,或者说如果外置这些配置信息。我们通过nacos的加载配置文件机制解决这个问题。

nacos会自动加载${prefix}-${spring.profile.active}.${file-extension}配置文件信息:

1、prefix 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix 来配置。

2、spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。

3、file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在 dataId 的拼接格式变成 prefix.{file-extension}

那我们可以利用spring.profile.active属性,设置db,以及redis配置信息:

spring:
 
   
  
  application:
 
   
  
    name: config-service
 
   
  
  cloud:
 
   
  
    #nacos相关配置
 
   
  
    nacos:
 
   
  
 #注册中心服务地址
 
   
  
      discovery:
 
   
  
        register-enabled: true
 
   
  
        server-addr: 127.0.0.1:8848
 
   
  
 #配置中心服务地址
 
   
  
      config:
 
   
  
        server-addr: 127.0.0.1:8848
 
   
  
        file-extension: yml
 
   
  
 profiles:
 
   
  
    active:
 
   
  
    - db
 
   
  
    - redis

我们需要在nacos配置中心新建文件:

springboot 配置 多个druid springboot配置多个yml文件_spring

springboot 配置 多个druid springboot配置多个yml文件_配置文件_02

springboot 配置 多个druid springboot配置多个yml文件_配置信息_03

这样的配置后,就无须在application.yml中配置db和redis配置信息了,启动时nacos客户端先去nacos配置中心读取配置,并加载初始化一些Bean。

这样就很好的起到了配置信息外置的方式,而且我们可以很方便的修改信息。

多模块共享配置

因为很多子模块都会需要链接数据库以及redis,而且他们的配置信息是一样的,那我们就不需要每个模块都要配置一次,我们只要利用nacos的共享配置机制:

spring:
      
  application:
      
    name: config-service
      
  cloud:
      
    #nacos相关配置
      
    nacos:
      
 #注册中心服务
      
      discovery:
      
        register-enabled: true
      
        server-addr: 127.0.0.1:8848
      
 #配置中心服务
      
      config:
      
        server-addr: 127.0.0.1:8848
      
        file-extension: yml
      
        shared-configs:
      
        - db.yml
      
        - redis.yml

springboot 配置 多个druid springboot配置多个yml文件_配置信息_04

这样每个子模块都这样配置,就只需要共享此配置文件。

动态刷新日志级别

那我们如何在线刷新日志级别呢?其实也很简单。

spring:

  application:

    name: config-service

  cloud:

    #nacos相关配置

    nacos:

#注册中心服务

      discovery:

        register-enabled: true

        server-addr: 127.0.0.1:8848

#配置中心服务

      config:

        server-addr: 127.0.0.1:8848

        file-extension: yml

        shared-configs:

        - db.yml

        - redis.yml

profiles:

    active:

    - log


springboot 配置 多个druid springboot配置多个yml文件_配置文件_05

日志配置内容:

springboot 配置 多个druid springboot配置多个yml文件_配置文件_06

业务中的日志代码:

log.error("这是一条error");

log.warn("这是一条warn"); log.info("这是一条info");

log.debug("这是一条debug");


直接通过nacos的配置,动态可以更新应用服务的日志级别。

多环境配置

多环境配置推荐利用nacos的命名空间方案,可以很好的实现。

springboot 配置 多个druid springboot配置多个yml文件_配置信息_07

可以在外部启动jar时,通过外部参数传入:

java -jar config-server.jar --spring.cloud.config.namespace=a1a8bb58-18a6-4e3e-a584-6adb109d7a85

总结

以上就是利用配置中心实现多项目模块,配置外置的方法,也能够实时刷新日志级别。