动态插件架构。从 Spring Boot 应用程序的目录中加载 jar 文件

Posted

技术标签:

【中文标题】动态插件架构。从 Spring Boot 应用程序的目录中加载 jar 文件【英文标题】:Dynamic plugins architecture. Loading jar files from a directory on Spring boot application 【发布时间】:2020-06-15 13:30:31 【问题描述】:

我知道这个问题到处出现,但是关于这个的帖子已经很老了。 我有一个 Spring Boot 应用程序。我需要允许开发人员开发插件、实现接口并允许我的应用程序在启动时动态加载它们。 我不需要在运行时发现,在启动时加载就足够了。 我不希望我的客户开发微服务。我想要将加载到 应用程序。 编写带有插件的 XML 文件以加载列表是一种选择,尽管我更喜欢尽可能简单的配置,如果可以避免这种需要,那就更好了。 我已经看到了一些选项:

OSGi(非常满足我的需要) JPF(2007 年最后更新) JSPF(我什至找不到这个的 github 页面)。

我真的想要一些快速而简单的东西,而且没有陡峭的学习曲线。如前所述,它应该与 Spring Boot 很好地配合使用。 我有哪些选择?

【问题讨论】:

【参考方案1】:

您可以使用PropertiesLauncher 为您的应用添加其他路径:

主类必须是:

Main-Class: org.springframework.boot.loader.PropertiesLauncher

然后你就可以启动应用了:

java -Dloader.path=lib,external-jar.jar -jar my-app.jar

请在此处阅读更多相关信息: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#executable-jar-launching

这里是https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#executable-jar-property-launcher-features

【讨论】:

也许我理解错了...我不是在寻找启动可执行文件...我需要在这些 jar 中加载包含的类,实例化它们并调用其中的接口方法... 这正是这个答案给你的。您可以将插件放在lib 目录中,它们将在启动时被检测到。是的,您正在寻找一种不同的方式来执行 Spring Boot 应用程序(可执行文件)。

以上是关于动态插件架构。从 Spring Boot 应用程序的目录中加载 jar 文件的主要内容,如果未能解决你的问题,请参考以下文章

京东一面:Spring Boot 如何热加载jar实现动态插件?

实战,Spring Boot整合GraphQL实现动态字段接口!

实战,Spring Boot整合GraphQL实现动态字段接口!

使用 Spring Boot Maven 插件时,jar 文件中缺少 Spring Boot 应用程序中的资源

5种运行Spring Boot应用的方法

Spring Boot快速构建应用