Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在基于注释的Spring Boot应用程序中实现插件体系结构_Java_Spring_Spring Mvc_Spring Boot_Plugin Architecture - Fatal编程技术网

Java 在基于注释的Spring Boot应用程序中实现插件体系结构

Java 在基于注释的Spring Boot应用程序中实现插件体系结构,java,spring,spring-mvc,spring-boot,plugin-architecture,Java,Spring,Spring Mvc,Spring Boot,Plugin Architecture,我想在Spring Boot应用程序中实现插件架构。让我解释一下我的情况。我有一个主应用程序,它启动服务器,管理安全等。这个应用程序就像我最终产品的根,它将包括这个根应用程序和添加到它的其他插件 现在,这些插件就是SpringBoot应用程序本身,我可以通过在特定路径中动态搜索JAR或将JAR作为库添加到项目依赖项来将其添加到根应用程序中 插件有自己的配置,就像在主根应用程序中运行的应用程序一样。比方说,如果根应用程序运行服务器,插件应用程序可能拥有为我的产品提供功能的所有控制器(端点)、bea

我想在Spring Boot应用程序中实现插件架构。让我解释一下我的情况。我有一个主应用程序,它启动服务器,管理安全等。这个应用程序就像我最终产品的根,它将包括这个根应用程序和添加到它的其他插件

现在,这些插件就是SpringBoot应用程序本身,我可以通过在特定路径中动态搜索JAR或将JAR作为库添加到项目依赖项来将其添加到根应用程序中

插件有自己的配置,就像在主根应用程序中运行的应用程序一样。比方说,如果根应用程序运行服务器,插件应用程序可能拥有为我的产品提供功能的所有控制器(端点)、bean等

这是前提,现在我想知道的是

  • 如何实现这种体系结构
  • 根应用程序将如何与插件通信
  • 它们是否有单独的应用程序上下文
  • 如何从根应用启动和配置子应用
  • 当应用程序收到来自客户端的请求时,考虑到我可能有许多插件,我如何将请求路由到特定插件中的特定控制器
  • 我对这里的概念以及它是如何工作的感到困惑。感谢您的任何帮助。如果有任何人都能提供的例子,那就太好了。

    如中所述,您有两个选择:

  • 采用OSGi的方式,它考虑了您的所有问题,但与Spring boot结合可能有点棘手
  • 使用
  • 至少对于第二种方法,每个jar文件都应该实现相同的接口,您可以使用该接口注册jar文件的内容(类似于OSGi包的start方法)。通过这种方式,您可以分离每个jar文件的应用程序上下文,并仅在启动时使其可用(例如,您可以创建一个上下文层次结构,将jar的上下文添加到根上下文中)


    您的最后一点可能是一个棘手的问题,因为您必须考虑有多个服务可以满足相同的请求。再次学习OSGi,这些服务通常是通过一个公共接口定义的,并且实现具有类似优先级的东西,这将指示如果有多个服务,应该使用哪个服务。当然,您可以定义其他方法来选择其中一种。

    有两种可能的选择:

  • 使用spring插件,您可以实现OSGi类功能。
  • 使用mirco引导,它将使用spring引导后端和mircoserver前端。它还根据您的需求提供插件支持。你可以探索

  • 这篇文章是三年前写的。然而,我想为那些为类似场景寻找解决方案的人回答这个问题。 似乎pf4j是一个适合您的插件框架。除了支持本机应用程序外,它还具有spring-pf4j,所以您可以在spring中使用它


    URL:

    我将实现类似的插件系统。你找到解决方案了吗?我真的建议不要使用OSGi方式,它在传统的JAR中工作得很好,但在spring中,它一直给我带来奇怪的错误,至少在Java 9中,我还没有找到在运行时检测插件的方法,所以是的,需要重新启动。可能想看看这个:-如果有人想使用pf4j,你可能还想看看。它构建在pf4j之上,提供了与SpringBoot更好的集成。