SpringBoot使用PropertiesLauncher加载外部jar包

Springboot启动入口源码

默认是org.springframework.boot.loader.JarLauncher

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-loader</artifactId>
</dependency>

启用SpringBoot的PropertiesLauncher

使用SpringBoot的PropertiesLauncher可以优先加载外部的jar文件, 这样可以在程序运行前替换jar包,
官方文档: Launching Executable Jars

使用演示

  1. 建立一个SpringBoot工程, 工程中依赖一个叫自定义的utils包, 版本是1.0.0, 通过http接口返回utils版本, 正常打包后访问, 返回1.0.0版本
@Slf4j
@RestController
public class HelloController {

    @RequestMapping("/version")
    public String version() {
        String version = VersionUtil.getVersion();
        log.info("请求version: " + version);
        return VersionUtil.getVersion();
    }

    @RequestMapping("spi-version")
    public Object spiVersion() {
        ArrayList<String> objects = new ArrayList<>();
        ServiceLoader<AgentInterface> load = ServiceLoader.load(AgentInterface.class);
        for (AgentInterface registry : load) {
            objects.add(registry.hello());
        }
        return objects;
    }

    @RequestMapping("/spring-res")
    public Object springRes() throws IOException {
        ArrayList<String> objects = new ArrayList<>();
        PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = pathMatchingResourcePatternResolver.getResources("classpath*:META-INF/services/com.example.utils.AgentInterface");
        for (Resource resource : resources) {
            objects.add(resource.toString());
        }
        return objects;
    }

}
  1. 在启用应用程序时通过-Dloader.path=/libs指定外部jar的目录, 再启动, 访问接口返回2.0.0版本, 说明包替换成功

指定PropertiesLauncher启动类执行

java -cp demo1-0.0.1-SNAPSHOT.jar org.springframework.boot.loader.PropertiesLauncher

在这里插入图片描述

java -cp demo1-0.0.1-SNAPSHOT.jar -Dloader.path=/Users/admin/.m2/repository/com/example/utils/2.0.0/ org.springframework.boot.loader.PropertiesLauncher

在这里插入图片描述

访问java spi

可以正常只加载2.0.0版本中的实现类, 这个符合预期
在这里插入图片描述

访问资源文件

访问资源文件, 会发现本应只从2.0.0版本中加载文件, 结果1.0.0版本中的也被加载了
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中实现热加载外部jar包,可以通过以下步骤进行操作: 1. 首先在pom.xml文件中添加spring-boot-devtools依赖,如下所示: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>runtime</scope> </dependency> ``` 该依赖主要用于开发环境下的热加载功能。 2. 然后,在application.properties文件中添加以下配置: ``` spring.devtools.restart.enabled=true ``` 该配置表示启用热加载功能。 3. 接下来,在IDE中启动Spring Boot应用程序。当修改了外部jar包时,IDE会自动检测到变化并重新加载应用程序。可以通过快捷键Ctrl + F9手动触发重新加载。 4. 此外,还可以在IDE的设置中进行配置,以确保外部jar包的修改能够被自动检测到。例如,在IntelliJ IDEA中,可以通过以下步骤进行设置: - 进入Preferences/Settings窗口,找到Build, Execution, Deployment - Compiler - 在右侧的Additional build process VM options中添加以下参数: ``` -Dspring.devtools.restart.additional-paths=/path/to/external/jar ``` 这样,IDE会监视指定路径下的外部jar包的变化,并自动触发热加载。 总结起来,实现Spring Boot的热加载外部jar包的步骤主要包括添加相关依赖、配置启用热加载功能,并在IDE中进行相应的设置。这样,当外部jar包发生变化时,应用程序会自动重新加载,从而提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值