SpringCloud整合nacos配置中心bootstrap.yml多环境配置
作者:mmseoamin日期:2023-12-25

前言

        我们在SpringCloud项目引入nacos作为配置中心后,为了方便开发,通常会有:local、test、prod等多个环境,本地调试代码用local的配置,测试环境打包用test的配置,生产环境打包用prod配置。本文以实际项目为例,给出了配置方法。并且基于生产环境,nacos账密需要定期修改,给出了生产环境配置bootstrap.yml配置文件的方案,仅供参考。

一、配置文件bootstrap.yml打在jar包里

1.项目pom.xml文件配置环境及nacos信息

标签配置不同环境的信息如下:


        
		
			local
			
				local
				127.0.0.1:8848
				d4460cce-jfh3-4a3e-92a8-51f597049999
				nacos
				123456
			
		
		
		
			base-test
			
				test
				127.0.0.2:8848
				d4460cce-gd54-4a3e-92a8-51f597049998
				173.16.204.246:4567
				nacos
				123456
			
		
		
		
			jiguan-prod
			
				prod
				127.0.0.3:8848
				d4460cce-yrhs-4a3e-92a8-51f597049997
				nacos
				123456
			
		
	

标签配置环境名

标签配置nacos服务的ip:端口

标签配置nacos命名空间

标签配置连接nacos服务的账号

标签配置连接nacos服务的密码

2.每个微服务模块下的bootstrap.yml配置文件配置如下:

SpringCloud整合nacos配置中心bootstrap.yml多环境配置,第1张

业务模块配置:

spring:
  security:
    type: springboot
  profiles:
    active: @activatedProperties@
  cloud:
    nacos:
      config:
        # 共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高;
        # .yaml后缀不能少,只支持yaml/properties
        shared-dataids: common.yaml         #共享配置
        refreshable-dataids: common.yaml    #可刷新共享配置
        server-addr: @nacosConfigAddr@      #nacos server地址
        namespace: @nacosNameSpace@         #命名空间,代指某个环境
        file-extension: yaml                #dataId扩展名
        username: @nacosUserName@
        password: @nacosPassword@  
  application:
    name: test-center  #服务名称

api-gateway网关模块配置:

spring:
  security:
    type: gateway
  profiles:
    active: @activatedProperties@
  cloud:
    nacos:
      config:
        # 共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高;
        # .yaml后缀不能少,只支持yaml/properties
        shared-dataids: common.yaml         #共享配置
        refreshable-dataids: common.yaml    #可刷新共享配置
        server-addr: @nacosConfigAddr@      #nacos server地址
        file-extension: yaml                #dataId扩展名
        namespace: @nacosNameSpace@         #命名空间 代指某个环境
        username: @nacosUserName@
        password: @nacosPassword@
    sentinel:
      transport:
        # 指定sentinel 控制台的地址
        dashboard: 127.0.0.1:8080
      eager: true
  application:
    name: api-gateway
  main:
    allow-bean-definition-overriding: true
    user:
      name: admin
      password: admin@123
      roles: admin
#metrics
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    gateway:
      enabled: false
    chaosmonkey:
      enabled: true
    health:
      show-details: always

项目启动或者打包时,idea工具勾选对应的环境,项目就会动态获取对应环境的nacos配置,去连接nacos配置中心了。这种方式是把nacos账密信息打在程序包里,项目启动时读取程序里的配置信息连接nacos服务获取项目的业务配置信息。

        这种方式有个弊端就是,在生产环境,当我们需要定期修改nacos配置信息以保障项目安全时,每次修改nacos服务的密码,都需要重新打包部署项目服务。要想在修改了nacos密码后不需要重新打包就能更新nacos密码,就需要将bootstrap.yml配置放到服务器上,这样修改完nacos配置信息,只需要在服务器上重启服务就好了。

二、配置文件bootstrap.yml放在服务器上

1.服务器微服务jar包同级目录创建config文件夹

mkdir config;

将bootstrap.yml配置文件放到config目录下,把启动环境信息还有nacos账密信息放到yml文件中,其余每个项目特有的信息(如:应用名称,security类型)放到项目代码中的bootstrap.yml配置文件中。

2.服务器上bootstrap.yml配置文件

spring:
  profiles:
    active: prod
  cloud:
    nacos:
      config:
        # 共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高;
        # .yaml后缀不能少,只支持yaml/properties
        shared-dataids: common.yaml                      #共享配置
        refreshable-dataids: common.yaml                 #可刷新共享配置
        server-addr: 127.0.0.3:4848                      #nacos server地址
        namespace: d4460cce-yrhs-4a3e-92a8-51f597049997  #命名空间代指某个环境
        file-extension: yaml                             #dataId扩展名
        username: nacos
        password: ENC(qDYb89YM4BP9gRFvjqTTqZGeQ==)
#jasypt加密
jasypt:
  encryptor:
    password: 1115@11

3.代码中resource目录下bootstrap.yml配置文件 

业务模块的配置:

spring:
  security:
    type: springboot  
  application:
    name: test-center

api-gateway网关模块配置:

spring:
  security:
    type: gateway
    sentinel:
      transport:
        # 指定sentinel 控制台的地址
        dashboard: 127.0.0.1:8080
      eager: true
  application:
    name: api-gateway
  main:
    allow-bean-definition-overriding: true
    user:
      name: admin
      password: admin@123
      roles: admin

总结

        springCloud项目启动时会先读取项目jar包同级目录下config目录中的yml配置,然后才会去项目jar包中读取resource目录下的yml配置,我们把各微服务模块共用的nacos账密信息和启动环境等配置放到服务器上,把各模块个性化配置放到服务jar包中,这样就能很好的处理nacos账密定期更新的问题,降低nacos密码更新对项目变更的影响。