SpringBoot15-项目部署
一、SpringBoot项目部署


二、Springboot属性配置方式
需求:项目打包完成后,需要修改端口号

一般是通过配置文件:application.yml修改的,但是一般项目打包好后,就不能修改了。
方式一:命令行参数方式

方式二:环境变量方式

SpringBoot jar 在启动的时候,会自动读取所在系统的环境变量。
也就是说:
- 你在 Windows 本地启动 → 读 Windows 的环境变量 
- 你把 jar 放到 Linux 服务器启动 → 读 服务器的环境变量 
它不会读你电脑的环境变量跑到服务器去,只会读 运行它的那台机器的环境变量。
1、系统环境变量在哪里被读取?
SpringBoot 在启动的时候会按优先级读取:
| 优先级高 → 低 | 来源 | 示例 | 
|---|---|---|
| 1 | 启动命令参数 | java -jar app.jar --server.port=9999 | 
| 2 | 系统环境变量 | DB_PWD=xxx | 
| 3 | 外部配置文件application.yml / properties | 配置文件写死的 | 
| 4 | 项目内部resources下的配置文件 | 
所以:
配置越“靠上”,优先级越高,就会覆盖下面的。
2、springboot读取环境变量的底层逻辑
具体负责这件事的是:
org.springframework.boot.context.config.ConfigDataEnvironment在 Spring Boot 启动过程中,这段代码会自动去收集所有可用的配置源,包括:
- application.yml / properties
- application-xxx.yml
- 系统环境变量 
- JVM 启动参数( - --server.port=8081)
- 操作系统 Shell 环境变量( - export DB_PWD=abc123)
- .env文件
- Spring Cloud Config 等(可选) 
3、真正触发读取环境变量的代码位置(底层)
Spring Boot 的主入口:
public static void main(String[] args) {SpringApplication.run(Application.class, args);
}
这个 .run() 里面会:
→ 创建 ConfigurableEnvironment
→ 调用 applyToEnvironment()
→ 然后 ConfigDataEnvironment 去解析所有配置源
→ 包括 环境变量
关键类:
org.springframework.boot.SpringApplication
org.springframework.boot.context.config.ConfigDataEnvironment
org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor
关键接口:
Environment
PropertySource
4、举个例子
假设你在服务器上运行:
export DB_PWD=abc123
java -jar app.jar
你的 application.yml:
spring:datasource:password: ${DB_PWD}
你没有写任何 java 代码来取环境变量,对吧?
但是 Spring Boot 启动后:
Environment → 发现存在系统变量 DB_PWD → 解析占位符 ${DB_PWD} → 注入到 DataSource
这就是为什么你不用写:
System.getenv("DB_PWD")
因为 Spring Boot 框架已经帮你自动做了。
5、高级了解
内部调用链(简化):
SpringApplication.run()→ prepareEnvironment()→ StandardEnvironment→ MutablePropertySources→ addLast(systemEnvironment)
也就是说 系统环境变量变成了 PropertySource,你项目里所有 @Value / ${} / @ConfigurationProperties 都能直接用。
6、总结
Spring Boot 在启动时自动把环境变量加入配置系统中。你只要在配置文件中写
${变量名}就能使用。
方式三:springboot读取外部配置文件(推荐)
这是 Spring Boot 在生产环境最常用、最推荐的做法。
Spring Boot 可以在启动时自动读取外部配置文件。
这样你就不需要把数据库密码、Redis 密码、API 密钥等写死在 application.yml 里。
1、外部配置文件可以放在哪里?
Spring Boot 默认会按顺序查找配置文件(优先级由高到低):
| 优先级 | 配置文件位置 | 示例路径 | 
|---|---|---|
| 最高 | 启动命令指定的位置 | --spring.config.location=/opt/app/config/ | 
| JAR 包同级目录 | /opt/app/application.yml | |
| 项目内部 resources 目录 | src/main/resources/application.yml | 
记住一句话:
jar 外面的配置,会覆盖 jar 里面的配置。
2、最常用、最实战的方式(推荐)
1)本地打包时不用改配置
你正常保留默认的:
src/main/resources/application.yml
2)在服务器创建一个外部配置目录
例如:
/opt/app/myapp/├─ myapp.jar└─ application-prod.yml   ← 外部配置文件
示例:

3)让 Spring Boot 读取这个文件
启动命令这样写:
java -jar myapp.jar --spring.config.location=/opt/app/myapp/application-prod.yml
或者(更推荐,更灵活):
java -jar myapp.jar --spring.config.additional-location=/opt/app/myapp/
意思是:
“兄弟你去
/opt/app/myapp/目录再找一遍配置文件。”
3、外部配置文件里写什么?
比如 application-prod.yml:
server:port: 8081spring:datasource:url: jdbc:mysql://127.0.0.1:3306/demousername: rootpassword: ${DB_PWD}   # 环境变量redis:host: 127.0.0.1port: 6379logging:file:name: /opt/app/myapp/logs/app.log
注意:我们把密码用 环境变量 替代,安全又规范。
4、启用对应 profile
如果你想区分开发 / 测试 / 生产:
内置文件:
application.yml
application-dev.yml
application-prod.yml
启动时:
java -jar myapp.jar --spring.profiles.active=prod
prod 就是使用 application-prod.yml
5、最推荐的“生产部署三件套”(企业标准)
| 配置内容 | 存放位置 | 含义 | 
|---|---|---|
| application.yml | JAR 内 | 默认/公共配置 | 
| application-prod.yml | 服务器外部 | 生产环境配置(数据库等) | 
| 环境变量 | 服务器 | 保存密码和敏感数据 | 
这样做的好处:
✅ 代码和配置彻底分离
✅ 密码不写进 Git,不会泄露
✅ 服务器不需要改 jar,只改外部配置
✅ 部署升级更安全、可复用性更高
三、Spring Boot 中的“多环境配置方案”
Profiles = Spring Boot 中的“多环境配置方案”
用来解决:
开发环境、测试环境、生产环境 用的配置不一样 怎么办?
比如:
| 环境 | 数据库 | 日志级别 | 
|---|---|---|
| 开发(dev) | 本地 MySQL | debug | 
| 测试(test) | 测试服务器 MySQL | info | 
| 生产(prod) | 正式服务器 MySQL | warn | 
Profiles 就是用来区分和切换这些配置的。
3-1、使用同一个配置文件

示例:

特定环境中的配置和通用信息冲突了,特定环境下的配置生效!
3-2、使用多个配置文件
示例:

创建多个配置文件,每个文件属于一个环境。

1、如何指定当前使用哪个环境的配置?


3-3、Profiles-分组
前面我们学过:
- application-dev.yml是一个环境配置文件
- application-prod.yml是另一个环境配置文件
但是,有时候一个环境里面的配置会很多、很杂、很长,比如:
| 配置内容 | 都写在 application-dev.yml中会变成: | 
|---|---|
| 服务器配置 | server.port | 
| 数据库配置 | spring.datasource… | 
| 日志配置 | logging… | 
| 自定义配置 | zyd.xxx… | 
如果全部写在 application-dev.yml,文件会变得又大又乱,不好维护。
所以,Spring Boot 允许我们:把同一个环境的配置再分拆成多个文件,比如 开发环境(dev) 下:
| 配置文件名 | 用来存什么 | 
|---|---|
| application-devServer.yml | 存服务器相关配置(端口等) | 
| application-devDB.yml | 存数据库配置 | 
| application-devSelf.yml | 存自定义业务配置 | 
也就是说:
·
这叫做 Profile 组 或 分组配置。
1、文件结构图:


2、激活方式:
示例:

或者:

3、小结

