springboot启动时加载外部jar?
现有一个springboot项目,通过扫描二维码查询信息,比如一棵树,扫描二维码后可以看到他相关的信息。但这个项目不止有树类型,还有道路,某个物品。所以将项目分模块开发,核心模块作为一个jar包,复制提供基础服务如数据导入导出。各类型构建成单独的jar。部署时需要那种类型就加载对应的jar。这样做是为了满足不同客户需求。
尝试:
java -Xbootclasspath/a:file:./libs -jar main.jar
,运行后并没有加载libs中的jarjava -Djava.ext.dirs=file:./libs -jar main.jar
,启动异常错误: 找不到或无法加载主类 .ext.dirs=file:..libs
原因: java.lang.ClassNotFoundException: /ext/dirs=file://libs
java -Dloader.path=file:./libs -jar main.jar
与第2种一样错误
请问需要使用什么方式才能在启动时同时加载外部jar呢?
回答:
java -classpath './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher# or
java -cp './libs*:main.jar' org.springframework.boot.loader.launch.JarLauncher
使用 -jar
启动时,-cp
会被忽略。
因此只能将运行 jar 也放入 -cp
中,再使用 main 类启动。
spring boot 的 main 类,打包成 jar 时,会变为 org.springframework.boot.loader.launch.JarLauncher
。
回答:
这个需要你实现一套插件加载机制。下面是我写的一个示例项目:
https://github.com/yiding-he/spring-boot-plugin-demo
这是一个在 Spring Boot 项目中实现插件机制的例子。其中包含三个模块:
- plugin-api:插件接口
- plugin-sample:插件实现
- main-service: 使用插件的主服务
其中 main-service 和 plugin-sample 都依赖 plugin-api 模块。
这个插件机制的特点在于:
- 插件独立开发打包,不依赖主服务的代码;
- 插件的加载使用单独的类加载器,避免插件和主服务之间相互依赖;
- 插件加载后自动被纳入 Spring IoC 容器管,并可以使用容器提供的各种环境;
运行方法:
- 首先对整个项目执行 mvn package,生成的插件包会输出到 plugins 目录下;
- 运行 main-service 项目,启动后会自动加载插件包并执行对应的逻辑;
以上是 springboot启动时加载外部jar? 的全部内容, 来源链接: utcz.com/p/945530.html