SpringBoot使用PropertiesLauncher加载外部jar包

 更新时间:2023年07月31日 10:56:07   作者:brucelwl  
这篇文章主要介绍了SpringBoot使用PropertiesLauncher加载外部jar包,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

启用SpringBoot的PropertiesLauncher

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

官方文档: Launching Executable Jars

使用演示

建立一个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;
    }
}

2.在启用应用程序时通过-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版本中的也被加载了

在这里插入图片描述

到此这篇关于SpringBoot使用PropertiesLauncher加载外部jar包的文章就介绍到这了,更多相关SpringBoot加载外部jar包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈线程的几种可用状态

    浅谈线程的几种可用状态

    下面小编就为大家带来一篇浅谈线程的几种可用状态。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java源码刨析之ArrayDeque

    Java源码刨析之ArrayDeque

    ArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。同时, ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用<BR>
    2022-07-07
  • JAVA基础面试题整理

    JAVA基础面试题整理

    在本篇文章里小编给大家整理的是关于JAVA基础面试题的整理内容,需要的朋友们可以参考下。
    2019-10-10
  • IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)

    IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)

    这篇文章主要介绍了IDEA 2020.1打开时闪退问题及解决方法,本文给大家分享我的处理方案,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • springboot分布式整合dubbo的方式

    springboot分布式整合dubbo的方式

    Dubbo是一款高性能、轻量级的开源Java RPC框架,本文通过实例代码给大家介绍springboot分布式整合dubbo的方式,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • 解决Swagger2返回map复杂结构不能解析的问题

    解决Swagger2返回map复杂结构不能解析的问题

    这篇文章主要介绍了解决Swagger2返回map复杂结构不能解析的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • JDK8配置环境变量的bat文件的详细教程

    JDK8配置环境变量的bat文件的详细教程

    这篇文章主要介绍了JDK8配置环境变量的bat文件,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot 使用定时任务(SpringTask)的详细步骤

    SpringBoot 使用定时任务(SpringTask)的详细步骤

    Cron 表达式非常灵活,可以满足各种定时任务的需求,但需要注意的是,Cron 表达式只能表示固定的时间点,无法处理复杂的时间逻辑,本文给大家介绍SpringBoot 使用定时任务(SpringTask)的详细步骤,感兴趣的朋友一起看看吧
    2024-02-02
  • Flutter验证码输入框的2种方法实现

    Flutter验证码输入框的2种方法实现

    本文主要介绍了Flutter验证码输入框的2种方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Java从JDK源码角度对Object进行实例分析

    Java从JDK源码角度对Object进行实例分析

    这篇文章主要介绍了Java从JDK源码角度对Object进行实例分析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12

最新评论