赞
踩
SpringBoot配置相关官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
使用 java -jar 命令启动 jar 包时添加临时属性
使用 --属性名=属性值
的形式指定临时属性,多个属性之间用空格间隔(每个属性名前都要有--
)
示例:
java -jar example-0.0.1-SNAPSHOT.jar --server.port=8080 --logging.level.root=warn
在 idea 右上角 Edit Configurations 中选择要启动的程序,设置 Program arguments,内容格式与命令行设置的参数一致
如下图:
SpringBoot 项目启动类中有 Args 参数传递,如下示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
args = new String[]{"--server.port=8080", "--logging.level.root=warn"};
SpringApplication.run(Application.class, args);
}
}
如上 main 函数中 args 就是命令行或 idea 传入的启动参数,可以写程序来修改
SpringApplication.run() 方法可以不传入 args 参数,从而达到拒接接收临时属性的效果
如下示例:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
不同优先级的配置文件同时存在时,不同的怕配置部分互补生效,相同的冲突部分优先级高的生效
同时,不同类型的配置文件同样有不同优先级:yaml < yml < properties
(idea 或命令行)启动时传入参数 --spring.config.name=filename
无需文件后缀名
spring.config.name 默认值为 application(所以配置文件名都为 application )
指定了别的文件名称后,application 配置文件将会失效,同样四个等级的配置文件中也只会扫描新的文件名
多个名称使用逗号分隔,后指定优先于先指定,示例:
java -jar example-0.0.1-SNAPSHOT.jar --spring.config.name=application,tempconfig
application 在前 tempconfig 在后,不同部分两者互补,冲突部分 tempconfig 覆盖 application
(idea 或命令行)启动时传入参数 --spring.config.location=file
指定配置文件的路径
支持绝对路径和相对路径,支持 classpath:/ ,要有后缀名
多个文件用逗号分隔,后指定优先于先指定
示例:
java -jar example-0.0.1-SNAPSHOT.jar --spring.config.location=classpath:/application.yml,tempconfig.yml
注意上面的 tempconfig.yml 是当前目录的相对路径,而非在 classpath:/ 内
使用 ---
来分隔不同的环境,不同环境中使用 spring.config.activate.on-profile 指定当前环境的名称
未指定环境名称的部分为默认配置,或公共配置,在这里使用 spring.profiles.active 指定要生效的环境名称
示例如下:
# 公共配置
profiles:
active: dev # 生效的环境,多个环境逗号分隔,冲突部分后声明覆盖先声明
---
# 开发环境
spring:
config:
activate:
on-profile: dev,env_dev # 可指定多个环境名称,逗号分隔
server:
port: 8080
spring.profiles 属性也可用来指定当前环境名称,效果与 spring.config.activate.on-profile 相同,但是过时的写法
---
# 过时写法
spring:
profiles: env1
---
# 推荐写法
spring:
config:
activate:
on-profile: env2
可以将不同的环境写入不同的配置文件,文件名称为 application-env.yml,其中 env 为环境名称
application.yml 文件为默认配置:
spring:
profiles:
active: dev # 生效的环境
application-dev.yml 表示 dev 环境的配置:
server:
port: 8081
不同环境不在需要设置环境名称,而是由文件名称决定
与 yaml 多文件相同,不同的环境配置写在不同的 properties 文件中,文件名为 application-env.properties
application.properties 文件为默认配置:
spring.profiles.active: dev # 生效的环境
application-dev.properties 表示 dev 环境的配置:
server.port: 8081
另外 properties 文件的配置无法将多个环境写进同一个 properties 文件中,只能由多文件来设置多环境
多环境组相关配置最好把不同环境写在不同文件中,写在同一文件中有加载顺序不正确的可能
示例:
spring:
profiles:
active: dev # 生效的环境
include: devMysql,devRedis # 引入其它环境到组内
如上配置中将采用 dev 环境同时引入 devMysql 和 devRedis 两个环境配置
主环境最后加载,加载顺序为: devMysql,devRedis,dev,冲突配置后加载覆盖先加载
实用性不高,等同于 active: devMysql,devRedis,dev
示例:
spring:
profiles:
active: dev # 生效的环境
group:
"dev": devMysql,devRedis
"pro": proMysql,proRedis
"test": testMysql,testRedis
使用 group 配置多个环境组及成员,切换组只需更改 active 主环境
注意:主环境最先加载,加载顺序为 dev, devMysql, devRedis
Maven多环境配置文章指路:https://blog.csdn.net/Cey_Tao/article/details/126602653
先看 Maven 配置:
<profiles> <profile> <!-- 开发环境 --> <id>env_dev</id> <properties> <spring.profile>dev</jdbc.url> </properties> <activation> <!-- 默认生效 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <!-- 生产(正式)环境 --> <id>env_pro</id> <properties> <spring.profile>pro</jdbc.url> </properties> </profile> </profiles>
再看 yaml 配置文件:
spring:
profiles:
active: @spring.profile@ # 读取 Maven 配置中的 spring.profile 属性
由于 spring.profile 属性在 Maven 不同环境中有不同的值
所以指定 Maven 环境进行编译或打包时,也就指定了 SpringBoot 的环境
[补充]
Maven 改变默认生效的环境后,idea 启动项目可能会不生效,时 idea 缓存问题,需要手动 compile 之后再启动即可生效
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。