背景
在使用 springboot 和sringcloud+nacos开发项目过程中,会有多种环境切换,例如开发环境,测试环境,演示环境,生产环境等,我们通过建立多个 yml 文件结合 profiles.active 属性进行环境指定,但是需要打包时就要手动更改配置文件逐个打包,容易造成不必要的误操作,本文就介绍如何进行不同环境配置文件的动态切换及一次性打包多个不同环境的部署包
配置 pom 文件
pom 文件添加 profiles 配置,项目有多少个配置文件,添加多少个子节点,profiles 标签于 parent 标签同级,这样我们就可以在右侧 maven 的配置项中勾选指定的环境
<!-- 配置文件 --><profiles><profile><!-- 研发环境 --><id>dev</id><properties><profiles.active>dev</profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><!-- 测试环境 --><id>test</id><properties><profiles.active>test</profiles.active></properties></profile><profile><!-- 线上环境 --><id>pro</id><properties><profiles.active>pro</profiles.active></properties></profile></profiles>
<build><finalName>${project.artifactId}-${project.version}.${project.packaging}</finalName><resources><!-- 代码生成器配置文件过滤 --><resource><directory>src/main/resources</directory><includes><include>bootstrap.yml</include><include>bootstrap-${profiles.active}.yml</include><include>**/*.xml</include></includes><filtering>true</filtering></resource>
</resources>
<plugins><!-- 编译 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!-- 打包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version></plugin></plugins>
创建多个配置文件
bootstrap.yml #主配置文件
bootstrap-dev.yml #开发环境配置
......
bootstrap.yml文件内容
spring:profiles:active: @profiles.active@
bootstrap-dev.yml文件内容
server:port: 9041servlet:context-path: /servicetomcat:uri-encoding: UTF-8max-http-form-post-size: -1
spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8application:name: serviceprofiles:active: @profiles.active@main:allow-bean-definition-overriding: truecloud:nacos:discovery:server-addr: @nacos.server@ip: @nacos.discovery@config:server-addr: @nacos.server@file-extension: yaml
打包命令
CMD
mvn clean install -Pdev
idea中启动时选择profiles
总结一下:
网上都是springboot多环境打包的方法,springcloud基本没看到。Spring Boot 默认核心配置文件名为 application
,支持 application.properties
、application.yml
、application.yaml
。后面两个本质上同一种类型。当三者同时存在时,优先级为:properties
> yaml
> yml
。这个没去验证过,但在springclod项目中,使用了nacos配置,application.yml是不起作用的,项目根本启动不了。
有些文章说 bootstrap.yml
的优先级最高。这种说法是不完全准确的!在springcloud+nacos项目中配置必须写在bootstrap*.yml中,不然启动直接报错,因为大部分配置都在nacose中,yml文件里只有服务器名称和nacos服务器的相关配置,如addr、group及namespace的定义,其它信息都配置在nacos中。