1、前言
最近做的用若依改造的一个项目要把里面的配置挪到nacos的配置中心,之前用过apollo做配置中心,nacos用的很少,而且是自己从头做的那种,而自己想要实现的效果是本地启动和到测试,预发,生产环境启动的时候,都不需要修改任何代码,直接部署就行,自己参考多个博客,和自己的琢磨,实现了自己想要的效果
2、参考文章
1)若依官网:http://doc.ruoyi.vip/ruoyi-cloud/cloud/config.html (感觉参考价值不是很大)
2)SpringCloud 配合Nacos进行Profile多环境配置详解:https://blog.csdn.net/weixin_40579395/article/details/126988951
3、版本和依赖说明
1)版本:
若依的版本是:3.8.5
nacos服务端的版本是:2.2.8
nacos客户端的版本是:2.1.0
2)nacos的依赖
<!-- nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
4、配置成果
这个版本的springcloud是需要用到bootstrap.yml和application.yml,所以项目里面就只需要留bootstrap.yml,之前自己还傻傻的在本地留了application-dev.yml的配置,后面发现注释掉这个文件里的内容也可以正常运行,其实这主要是自己对nacos的配置中心原理不熟悉导致的,配置完成之后的成果是这样的:
1)nacos配置中心
2)工程里的配置
5、配置步骤
1)改造bootstrap.yml
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8080
servlet:
# 应用的访问路径
context-path: /
tomcat:
# tomcat的URI编码
uri-encoding: UTF-8
# 连接数满后的排队数,默认为100
accept-count: 1000
threads:
# tomcat最大线程数,默认为200
max: 800
# Tomcat启动初始化的线程数,默认值10
min-spare: 100
spring:
application:
name: ruoyi-system-svc
profiles:
#采用灵活的参数配置 在pom.xml中定义不同的环境 打包时指定配置文件打包
active: @spring.profiles.active@
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: ${common.nacos.config.server}
# 命名空间
namespace: ${common.nacos.config.namespace:public}
username: ${common.nacos.config.username:nacos}
password: ${common.nacos.config.password:ncs-nacos}
config:
# 配置中心地址
server-addr: ${common.nacos.config.server}
namespace: ${common.nacos.config.namespace:public}
username: ${common.nacos.config.username:nacos}
password: ${common.nacos.config.password:ncs-nacos}
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
这个配置可以复制直接食用~~
2)多环境profile配置
多环境bootstrap的文件格式:
bootstrap-{profile}.yml
profile一般为各个环境的命名,比如开发(dev)、测试(test)、生产 (prod)等等,这里的环境命名需要和放在pom中的profile的spring.profiles.active属性值保持一致即可。
每个bootstrap-{profile}.yml的文件内容都只有nacos的配置,由于我目前只有一个nacos服务端,所以都是一样,大家到了不同的环境有了不同的nacos服务端的信息之后就配置成对应环境的nacos地址即可,我这里用dev的命名空间来区分各个环境,前提需要在nacos中创建对应的命名空间:
2.1) bootstrap-dev.yml
common:
nacos:
config:
#Nacos 服务地址
server: 127.0.0.1:8848
username: nacos
password: nacos
#Nacos 命名空间
namespace: dev
2.3) bootstrap-test.yml
common:
nacos:
config:
#Nacos 服务地址
server: 127.0.0.1:8848
username: nacos
password: nacos
#Nacos 命名空间
namespace: test
2.3) bootstrap-prod.yml
common:
nacos:
config:
#Nacos 服务地址
server: 127.0.0.1:8848
username: nacos
password: nacos
#Nacos 命名空间
namespace: prod
3)pom文件增加多环境配置
<profiles>
<profile>
<id>dev</id>
<activation>
<!--默认激活-->
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<spring.profiles.active>test</spring.profiles.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
</profile>
</profiles>
<build>
<!-- 配合profiles中配置的环境文件使用,不配置项目启动报错 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 处理文件时替换文件中的变量 -->
<filtering>true</filtering>
<excludes>
<!-- 打包时排除文件-->
<exclude>bootstrap.yml</exclude>
<exclude>bootstrap-dev.yml</exclude>
<exclude>bootstrap-test.yml</exclude>
<exclude>bootstrap-prod.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<!-- 打包时所包含得文件 -->
<includes>
<include>bootstrap.yml</include>
<include>bootstrap-${spring.profiles.active}.yml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
说明:上面这段build标签中的最后打包的finalName的值取的是这个pom中定义的值:
这样配置之后,本地的idea就可以直接启动了,那到了测试环境和生产环境怎么办,怎么激活环境呢,这个时候就需要在打包和启动的命令中增加参数的配置
- 打包:
mvn -B clean package -P test -Dmaven.test.skip=true -Dautoconfig.skip
说明:-P 后面的test就是指定了打包的环境是test环境
- 启动:
java -jar xxx.jar --spring.profiles.active=test
说明:spring.profiles.active=test就是指定了启动时读取test环境的配置,也就是读取bootstrap-test.yml的配置,这个时候,nacos也会读取test的命名空间里的yml配置文件。
到这里就配置完成了,后面再改配置的话,无论是开发环境,测试环境还是生产环境,都只需要修改nacos中对应命名空间里的配置了。快来开始快乐的配置吧!
-----------------你知道的越多,不知道的越多!----------------------