springboot项目jar包启动, 配置文件外置

在Spring Boot中,将配置文件外置有多种方式,以下是常见的几种方法:

1. 命令行参数指定配置文件

bash 复制代码
java -jar app.jar --spring.config.location=/path/to/application.properties

或指定多个配置文件:

bash 复制代码
java -jar app.jar --spring.config.location=/path/to/application.properties,/path/to/application-dev.yml

2. 指定配置文件目录

bash 复制代码
# 会加载该目录下的所有配置文件
java -jar app.jar --spring.config.location=file:/config/

3. 使用外部配置文件优先级顺序

Spring Boot按以下顺序加载配置(优先级从高到低):

  1. 命令行参数

  2. 当前目录下的 /config 子目录

  3. 当前目录

  4. classpath下的 /config 包

  5. classpath根目录

4. 推荐的项目结构

复制代码
project-root/
├── app.jar                    # 打包后的jar文件
├── config/                    # 外部配置文件目录(优先级最高)
│   ├── application.yml
│   ├── application-dev.yml
│   └── application-prod.yml
└── application.yml           # 当前目录下的配置文件

5. 实际部署示例

创建部署脚本 start.sh:

bash 复制代码
#!/bin/bash

# 应用名称
APP_NAME="your-app.jar"
# 配置文件目录
CONFIG_DIR="/app/config"
# 日志目录
LOG_DIR="/app/logs"

# 创建目录
mkdir -p ${CONFIG_DIR}
mkdir -p ${LOG_DIR}

# 启动应用
java -jar ${APP_NAME} \
    --spring.config.location=file:${CONFIG_DIR}/ \
    --logging.file.path=${LOG_DIR} \
    --server.port=8080

7. Windows系统启动

bash 复制代码
@echo off
java -jar app.jar --spring.config.location=file:.\config\

9. Spring Boot 2.4+ 配置新特性

使用 application.yml 和 application-{profile}.yml 组合:

bash 复制代码
# application.yml
spring:
  config:
    import:
      - optional:file:./config/[optional-file.properties]
      - optional:file:./config/custom-config.yml

10. 生产环境最佳实践

bash 复制代码
#!/bin/bash
# start-prod.sh

JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
CONFIG_PATH="/opt/app/config"
LOG_PATH="/opt/app/logs"

nohup java ${JAVA_OPTS} \
    -jar app.jar \
    --spring.config.location=file:${CONFIG_PATH}/ \
    --spring.profiles.active=prod \
    --logging.file.path=${LOG_PATH} \
    > ${LOG_PATH}/console.log 2>&1 &

注意事项:

  1. 路径格式:

    • Linux/Mac: file:/absolute/path/ 或 file:./relative/path/

    • Windows: file:C:/path/ 或 file:./path/

  2. 多配置文件:使用逗号分隔多个路径

  3. 配置加密:敏感信息建议使用加密配置或使用配置中心

选择适合你部署环境的方式,通常推荐使用独立的config目录来管理配置文件。

相关推荐
光依旧8 分钟前
MCP实战手记系列(十):MCP Server高可用实战
spring boot·高可用·nginx负载均衡·redis哨兵·mcp·微服务容错·resilience4j熔断
省钱兄--zs3 小时前
西安24小时自助健身房解决方案实战:系统开发与部署全流程指南
java·spring boot·系统架构·intellij-idea·需求分析
福兮说4 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
ly76895 小时前
Spring Boot 集成 Elasticsearch 的生产实践:客户端选型、索引生命周期与批量写入容错
spring boot·elasticsearch·索引生命周期·java api client·批量写入
程序猿_极客6 小时前
【免费】分享一套优质的基于SpringBoot的服装商城管理系统的设计与实现(带可视化图表、协同过滤功能),源码+文档+视频详解(讲解)
java·spring boot·后端·服装商城管理系统
bug菌6 小时前
🤔同事突然问我:Spring的注解 @Component 和 @Service 有何不同?
java·spring boot·后端
Lonely丶墨轩7 小时前
用 Vue + Spring Boot + Python 做一个 AI 双人海龟汤游戏:从出题、联机到自动审稿等核心技术设计与实现
spring boot·后端·游戏
她的男孩9 小时前
打印模板草稿能保存,一点发布就报主从关系:我们把校验拆成了两档
java·spring boot·后端
wno70410 小时前
Spring Boot整合Quartz
java·spring boot·后端
萧瑟余晖10 小时前
Spring Boot Actuator监控运维详解
spring boot