Spring Boot 使用 PropertiesLauncher + loader.path 实现外部 Jar 扩展启动

在实际项目中,经常会遇到这样一种场景:

  • 主 Spring Boot Jar 无法重新打包

  • 希望 动态加载外部 Jar

  • 外部 Jar 中包含:

    • 拦截器(Interceptor)
    • Filter
    • 自动配置
    • 业务组件

Spring Boot 官方其实早就提供了解决方案 ------ PropertiesLauncher


一、启动命令示例

bash 复制代码
java -cp runner.jar \
     -Dloader.main=com.monster.core.BootApplication \
     -Dloader.path=runner-other.jar \
     org.springframework.boot.loader.PropertiesLauncher

二、整体启动流程

复制代码
JVM
 ↓
加载 runner.jar
 ↓
PropertiesLauncher
 ↓
解析 loader.path
 ↓
加载 runner-other.jar
 ↓
启动 BootApplication

三、关键参数说明

1️⃣ -cp runner.jar

指定 JVM 启动时的 classpath。

  • 该 Jar 必须是 Spring Boot 可执行 Jar
  • 内部包含 spring-boot-loader

2️⃣ -Dloader.main

bash 复制代码
-Dloader.main=com.monster.core.BootApplication

指定真正的 Spring Boot 启动类。

适用于:

  • 主类不在 manifest 中
  • 或需要显式指定启动入口

3️⃣ -Dloader.path

bash 复制代码
-Dloader.path=runner-other.jar

这是实现 外部 Jar 扩展加载的核心参数

支持:

  • jar 文件
  • 目录
  • 多路径(逗号分隔)
bash 复制代码
-Dloader.path=lib/,plugin.jar

4️⃣ PropertiesLauncher

bash 复制代码
org.springframework.boot.loader.PropertiesLauncher

Spring Boot 提供的 可配置启动器,用于:

  • 加载外部 Jar
  • 构建自定义 ClassLoader
  • 启动 Spring 容器

四、外部 Jar 如何被 Spring 扫描?

确保满足以下任意一种方式:

✅ 方式一:包名在扫描路径下

java 复制代码
@SpringBootApplication(scanBasePackages = "com.monster")

✅ 方式二:自动配置(推荐)

properties 复制代码
META-INF/spring.factories
properties 复制代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.other.config.OtherAutoConfiguration

✅ 方式三:Spring Boot 3.x

text 复制代码
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

五、典型应用场景

  • 插件化系统
  • Agent / 扩展包加载
  • 不可重新打包的生产 Jar
  • 动态拦截器 / Filter 注入

六、常见问题

❓ 外部 Jar 不生效?

排查顺序:

  1. loader.path 是否正确
  2. Jar 是否 未压缩嵌套
  3. Spring 是否能扫描到包
  4. 是否存在 ClassLoader 冲突
相关推荐
戮漠summer3 小时前
Missing Semester 计算机教育中缺失的一课 Lecture 01 Shell
开发语言·后端·scala
IT_陈寒5 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
长不胖的路人甲5 小时前
SpringCloud 服务雪崩、熔断、降级
后端·spring·spring cloud
爱折腾的小黑牛6 小时前
小程序多人协作的权限设计:三级权限的实现
后端
蓝银草同学6 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
小小猪的春天7 小时前
AI 编程 30 天实验复盘:效率提升 65%,线上 bug 涨到 11 个,问题出在哪
后端
爱勇宝7 小时前
3位工程师靠“删AI代码”创业,一周收费1万美元:以后最贵的能力,可能不是写代码
前端·后端·架构
沫离痕8 小时前
Cassandra 4.0.11 Docker 安装与配置手册
java·spring boot
不能放弃治疗8 小时前
rule 和 skill
后端