当前位置: 首页 > 知识库问答 >
问题:

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

张姚石
2023-03-14

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

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

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

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

  1. 如何实现这种体系结构

我对这里的概念以及它是如何工作的感到困惑。感谢您的任何帮助。如果有任何人都能提供的例子,那就太好了。

共有3个答案

邴烨
2023-03-14

有两种可能的选择:

  1. 使用spring插件,您可以实现OSGi类功能。https://github.com/spring-projects/spring-plugin
  2. 使用mirco引导,它将使用Spring Boot后端和mircoserver前端。它还根据您的需求提供插件支持。你可以探索https://github.com/aol/micro-server/tree/master/micro-boot
左仰岳
2023-03-14

如Java动态加载插件中所述,您有两个选项:

  1. 采用OSGi的方式,它考虑了您的所有问题,但与Spring boot结合可能有点棘手

至少对于第二种方法,每个jar文件都应该实现相同的接口,您可以使用该接口注册jar文件的内容(类似于OSGi包的start方法)。通过这种方式,您可以分离每个jar文件的应用程序上下文,并仅在启动时使其可用(例如,您可以创建一个上下文层次结构,将jar的上下文添加到根上下文中)。

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

万坚壁
2023-03-14

这个帖子是3年前的。然而,我想为那些为类似场景寻找解决方案的人回答这个问题。似乎pf4j是一个适合你的插件框架。除了支持本地应用程序,它还有sping-pf4j,所以你可以在Spring中使用它。

URL:https://pf4j.org

 类似资料:
  • 我对web应用程序向微服务的发散点感到困惑--它是在url级别还是模型级别?举个例子,假设我有一个单片应用程序,它提供3个页面。假设每个页面都有一个单独的用法,我想用它们自己的微服务来支持它们。下面哪一种是实现基于微服务的体系结构的正确方法: 我创建了三个不同的应用程序(微服务),每个都包含一个页面的(路由、控制器、模型、模板)。然后根据哪个页面被请求,我将请求路由到那个特定的应用程序。这意味着从

  • Rust 代码文件中,通常我们可以看到 3 种注释。 行注释 文档注释 模块注释 行注释 // 后的,直到行尾,都属于注释,不会影响程序的行为。 // 创建一个绑定 let x = 5; let y = 6; // 创建另一个绑定 文档注释 文档注释使用 ///,一般用于函数或结构体(字段)的说明,置于要说明的对象上方。文档注释内部可使用markdown格式的标记语法,可用于 rustdoc 工具

  • 我正在学习Dagger2,并试图构建一个非常愚蠢的示例(Mainactivity必须实例化一个汽车类)。 null 完成我的汽车课

  • 我们正在开发一个部署在Websphere Web Server上的Java EE Web应用程序。目前,需要并发执行来加快响应时间。那么在下面的选择中,哪个以及为什么会是一个更好的选择呢? 使用 使用(上述两种方法的基本用法和实现差异是什么) 还有其他选择吗?

  • 我试图了解如何使用Json Web令牌在单点登录架构中实现注销特性。 假设我们有: 当用户必须在上进行身份验证时,他将被重定向到,后者将验证用户凭据,创建一个签名的JWT令牌,并使用该令牌将用户重定向回。将设置一个cookie(或LocalStorage密钥),用户将在上进行身份验证,只要该令牌没有过期。不再需要调用来识别用户。 然后,用户转到参与SSO体系结构的。用户也需要在那里进行身份验证,因

  • 问题内容: 让我们分享基于Java的Web应用程序体系结构! Web应用程序有许多不同的体系结构,这些体系结构将使用Java来实现。这个问题的答案可以用作各种Web应用程序设计的库,各有其优缺点。虽然我意识到答案将是主观的,但让我们尽可能做到客观,并激发我们列出的利弊。 使用您喜欢的详细程度描述体系结构。为了使您的答案具有任何价值,您至少必须描述所描述的体系结构中使用的主要技术和思想。最后但并非最

  • 我们试图将AspectJ实现到现有软件中,以便在进行服务调用后执行一些代码。 注: null 删除了批注,该批注可以正确地自动连接所有内容,但我们的@Aspect从未被调用。 通过声明在批注中添加了CGLIB支持,但无效。 我们尝试直接从Spring中遵循以下文档:@EnableAspectJAutoproxy Javadoc 这似乎是AspectJ处理自动连线依赖关系的代理机制的一个问题。 为什

  • 我的情况是,我有Grails 2.1.2应用程序,并希望引入使用缓存插件和cache-ehcache插件作为实现的方法级缓存。 我的缓存配置为在内存中,如下所示: 我有一个像这样的方法,它只接受int参数,所以密钥生成不是问题: 我的问题是,当调用这个方法时,我得到了一个< code > Java . lang . out of memory error:Java heap space 异常。原因