SpringBoot使用PropertiesLauncher加载外部jar包
作者: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包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!