SpringBoot多环境开发
多环境开发
使用---
区分多环境
yml配置格式
方法1
#设置启用的环境
spring:
profiles:
active: dev
---
#开发
spring:
config:
activate:
no-profiles: dev
jdbc:
url: jdbc:mysql://21.36.2.252/ccb
user: ccb_admin
password: 3&dg7quwdu!
server:
port: 8080
---
#生产
spring:
config:
activate:
no-profiles: pro
jdbc:
url: jdbc:mysql://211.316.211.252/ccb
user: ccb_uesr
password: 3&dg7grerge4
server:
port: 8081
---
#测试
spring:
config:
activate:
no-profiles: test
jdbc:
url: jdbc:mysql://localhost/ccb
user: root
password: 1234
server:
port: 8082
方法2
application.yml
spring:
profiles:
active: dev
application-dev.yml
server:
port: 80
properties配置格式
主配置文件application.properties:
#设置启用的环境
spring.profiles.active=dev
环境分类配置文件application-dev.properties:
server.port=8080
环境分类配置文件application-pro.properties:
server.port=8081
环境分类配置文件application-test.properties:
server.port=8082
多环境分组管理
springboot2.4之前
- 根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下
- 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
- 加载时按顺序,include--->active,后加载的覆盖先加载的(devMVC-->devDB-->dev)
application.yml
spring:
profiles:
active: dev
include: devMVC,devDB
application-devMVC.yml
server:
servlet:
conntext-path: /ebank
springboot2.4之后
- 启动dev后会加载对应组的配置
- 顺序变了:dev-->devDB-->devMVC;后加载的覆盖先加载的
application.yml
spring:
profiles:
active: dev
group:
"dev": devDB,devMVC
"pro": proDB,proMVC
多环境命令行启动参数配置
使用 SpringBoot
开发的程序以后都是打成 jar
包,通过 java -jar xxx.jar
的方式启动服务的。那么就存在一个问题,如何切换环境呢?因为配置文件打到的jar包中了。
我们知道 jar
包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而 SpringBoot
提供了在运行 jar
时设置开启指定的环境的方式,如下
java –jar xxx.jar –-spring.profiles.active=test
那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式
java –jar xxx.jar –-server.port=88
当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot
官网已经进行了说明,参见 :
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
进入上面网站后会看到如下页面
- 当配置中有中文,idea改成utf-8
- 带参数启动SpringBoot优先级较高
测试环境:
java -jar 文件名.jar --spirng.profiles.active=test
临时改端口:
java -jar 文件名.jar --spirng.profiles.active=test --server.port=88
多环境开发兼容问题(maven/boot)
都配置多环境开发时的兼容问题
当Maven与SpringBoot同时对多环境进行控制时,以Mavn为主,SpringBoot使用@..@占位符读取引用Maven对应的配置属性值
基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时pom.xml每次更新需要手动compile方可生效
资源文件处理的插件
解析
{}
,加载yml里的配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
pom.xml
<!--多环境-->
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
<!--测试环境-->
<profile>
<id>test</id>
<properties>
<profile.active>test</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
修改yml
spring:
profiles:
active: ${profile.active}
active: @profile.active@
配置文件分类
测试时要修改的临时属性太多
java xxxxxxxx --xxx --xxx --xxx --xxx
,使用配置文件启动1级与2级留做系统打包后设置通用属性(上线);3级与4级用于系统开发阶段设置通用属性(开发)
SpringBoot中的4种配置文件
- file : config/application.yml(最高)(jar包同级目录)
- file : application.yml
- classpath: config/application.yml
- classpath: application.yml(最普通的配置文件)