目录
在 Spring Boot 项目部署中,属性配置是一项关键任务。本文将详细介绍 Spring Boot 的几种常见属性配置方式,包括项目配置文件、命令行参数、环境变量以及外部配置文件,并探讨它们的优先级。
一、项目配置文件
Spring Boot 提供了两类配置文件:properties
和yml
(或yaml
),开发中更多使用yml
配置文件。在配置文件中,我们可以通过键值对的方式完成属性配置,例如配置端口号:
server:
port: 8080
然而,这种配置方式存在局限性。当项目打成 jar 包交给运维或客户后,他们无法直接修改属性。
二、命令行参数方式
- 格式
在运行java -jar
命令时,可在后面添加参数,格式为--键=值
。例如修改端口号:
java -jar your-jar-file.jar --server.port=9999
- 原理
添加的参数会传递给启动类的main
方法,在main
方法中用String[] args
数组接收,启动 Spring 应用时又将该数组传递给run
方法,从而实现属性修改。 - 演示
- 先停止已启动的应用(可按
CTRL + C
)。 - 打开命令行窗口,执行
java -jar
命令并添加端口参数,如java -jar big-xxx.jar --server.port=9999
(big-xxx.jar
为实际的 jar 包名,可按tab
键补齐)。 - 启动完成后,可观察到端口已成功修改为 9999。
- 先停止已启动的应用(可按
三、环境变量方式
- 设置变量
在环境变量中添加属性,变量名和值需与 Spring Boot 中所需的键和值保持一致。例如,设置端口为 7777:- 右键点击 “此电脑”,选择 “属性”。
- 找到 “高级系统设置”,点击 “环境变量”。
- 在 “用户变量” 下新建变量,变量名设为
SERVER_PORT
(注意大写),值为7777
。
- 注意事项
如果环境变量发生变化,需要重新启动命令行窗口才能生效。 - 演示
- 设置好环境变量后,在命令行中先停止之前的程序(
CTRL + C
)。 - 重新打开一个命令行窗口(若不重新打开,端口号可能不会生效),执行
java -jar your-jar-file.jar
(不带端口参数)。 - 启动完成后,可看到端口绑定为 7777。
- 设置好环境变量后,在命令行中先停止之前的程序(
四、外部配置文件方式
- 创建配置文件
在 jar 包所在的目录下,提供一个application.yml
(或application.properties
)配置文件,可批量配置要修改的属性。例如:
server:
port: 6666
- 演示
- 找到 jar 包所在目录(如
target
目录)。 - 将原有的
application.yml
(或application.properties
)配置文件复制到该目录下(若不存在则新建)。 - 用记事本打开复制过来的配置文件,修改端口号等属性(如上述示例将端口设为 6666),保存并关闭。
- 在命令行中停止之前的程序,删除环境变量中的相关属性(若有),关闭命令行窗口并重新打开。
- 进入 jar 包所在目录,执行
java -jar your-jar-file.jar
,可观察到端口已按配置文件中的设置绑定为 6666。
- 找到 jar 包所在目录(如
五、配置优先级
当同时通过上述四种方式配置相同属性时,它们的优先级从上往下依次变高,即命令行参数 > 环境变量 > jar 包所在目录下的application.yml
(或application.properties
)> 项目中的resources
目录下的application.yml
(或application.properties
)。
- 验证优先级
- 分别在项目的
resources
目录下的application.yml
中配置server.port: 8081
。 - 在 jar 包所在目录下的
application.yml
中配置server.port: 8082
。 - 在系统环境变量中新建
SERVER_PORT=8083
。 - 在命令行执行
java -jar your-jar-file.jar --server.port=8084
。 - 启动程序,观察端口号,会发现是 8084,符合优先级顺序。
- 然后去掉命令行参数重新启动,端口号变为 8083(环境变量生效)。
- 删除环境变量中的端口配置,重新启动,端口号变为 8082(jar 包所在目录下的配置文件生效)。
- 将 jar 包所在目录下的
application.yml
重命名或删除,重新打 jar 包并启动,端口号变为 8081(项目中的配置生效)。
- 分别在项目的
Spring Boot 提供了多种属性配置方式,各有优劣和适用场景。在实际开发中,根据需求灵活运用这些配置方式,并了解它们的优先级关系,有助于更好地部署和管理 Spring Boot 项目。希望本文能帮助大家深入理解 Spring Boot 的属性配置机制,在项目开发中更加得心应手。