当前位置: 首页 > news >正文

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.ymlJAR 内默认/公共配置
application-prod.yml服务器外部生产环境配置(数据库等)
环境变量服务器保存密码和敏感数据

这样做的好处:

✅ 代码和配置彻底分离
✅ 密码不写进 Git,不会泄露
✅ 服务器不需要改 jar,只改外部配置
✅ 部署升级更安全、可复用性更高


三、Spring Boot 中的“多环境配置方案”

Profiles = Spring Boot 中的“多环境配置方案”

用来解决:

开发环境、测试环境、生产环境 用的配置不一样 怎么办?

比如:

环境数据库日志级别
开发(dev)本地 MySQLdebug
测试(test)测试服务器 MySQLinfo
生产(prod)正式服务器 MySQLwarn

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

http://www.dtcms.com/a/545285.html

相关文章:

  • 安卓玩机工具推荐------ROOT与免ROOT安卓设备玩机工具
  • 【视觉slam十四讲】【十二讲 建图】12.1 习题:证明两个正态分布的联合分布
  • 【大数据高并发核心场景实战】 数据持久化层 - 查询分离
  • 一键阿里云 wordpress在门户网站做产品seo
  • 互联网站建设机构搭建网站大概多少钱
  • JavaScript DOM节点操作详解
  • Ultralytics 代码库深度解读【三】:YOLO V8/V11 核心模块可视化拆解(网络结构与参数解析)
  • 佰力博检测与您探讨压电陶瓷圆柱纵向振动模式
  • 32岁学做网站石家庄网站建设平台有哪些
  • 基于 51 单片机的智能手势控制小车设计与实现
  • 做暧免费网站wordpress 关闭更新警告
  • 网站开发好吗软件外包公司有哪些
  • 使用Deeplabv3+进行遥感影像土地利用分类
  • 深度学习之图像分割:从基础概念到核心技术全解析
  • Linux-unzip解压命令的安装与使用
  • 基于深度学习技术实现染色质开放区域的预测与分析系统源代码+数据库,采用Flask + Vue3 实现前后端分离的植物染色质可及性预测系统
  • 7.OpenStack管理(一)
  • Vscode | 突然无法正常连接远程服务器
  • Kubernetes 实战入门:核心资源操作指南
  • 写作网站保底和全勤的区别wordpress 心情评论插件
  • php做购物网站怎么样网站404页面做晚了
  • 电子商务智能建站查询价格的网站
  • 定制线束源头工厂解决方案品牌推荐-力可欣储能线束:为新能源汽车提供持久动力
  • Spring Boot中的JUC并发解析
  • k8s一站式学习
  • 7.1.4 大数据方法论与实践指南-数据服务接口
  • 网安面试题收集(6)
  • 建设网站需要多少钱济南兴田德润o地址济南网站建设加q479185700
  • 站长之家appwordpress添加版权
  • LeetCode每日一题——Pow(x, n)