动态插件架构。从 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实现动态字段接口!