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读取环境变量的底层逻辑

具体负责这件事的是:

java 复制代码
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 的主入口:

java 复制代码
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: 8081

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/demo
    username: root
    password: ${DB_PWD}   # 环境变量
  redis:
    host: 127.0.0.1
    port: 6379

logging:
  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、小结

相关推荐
爱玩代码的小张3 小时前
MinIO分布式存储(从0到Vue+SpringBoot整合开发)2024版
spring boot
爱玩代码的小张3 小时前
DLJD MinIO分布式存储从0到Vue+SpringBoot整合开发2024年4月
spring boot
Slow菜鸟5 小时前
SpringBoot集成Elasticsearch | Spring官方场景启动器(Spring Data Elasticsearch)方式
spring boot·spring·elasticsearch
星辰h5 小时前
基于JWT的RESTful登录系统实现
前端·spring boot·后端·mysql·restful·jwt
YDS8295 小时前
苍穹外卖 —— 文件上传和菜品的CRUD
java·spring boot·后端
Java陈序员5 小时前
完全开源!一款基于 SpringBoot + Vue 构建的社区平台!
vue.js·spring boot·github·社区
.柒宇.6 小时前
《云岚到家》第一章个人总结
spring boot·spring·spring cloud
刘一说6 小时前
深入掌握 Spring Boot Web 开发:构建高性能 RESTful API 的最佳实践
前端·spring boot·restful
摇滚侠6 小时前
Spring Boot3零基础教程,Actuator 导入,笔记82
java·spring boot·笔记