【问题标题】:Modular web application with Spring使用 Spring 的模块化 Web 应用程序
【发布时间】:2014-02-17 09:10:33
【问题描述】:

我想创建一个 Web 应用程序,该应用程序拆分为如下结构的扩展:

  • 核心
  • 后端 A - 取决于核心(可能还有后端 B)
  • 后端 B - 取决于核心和后端 A
  • 前端 A - 取决于后端 A 和 B
  • 前端 B - 取决于后端 A 和 B

它们应该在 Tomcat 中运行。现在我的问题是我仍然想提供从它所依赖的扩展注入服务的能力。此外,两个前端应该使用后端扩展中定义的每个服务的相同实例。如果扩展的配置可以完全基于注释(WebApplicationInitializer 和@Configuration)发生,那将是一个很酷的功能。

我尝试过的:

  • 将核心和后端扩展创建为 Web 应用程序不起作用,因为它们有自己的类加载器和上下文,无法注入
  • 将扩展作为库导出到 tomcat 并将它们包含到每个 Frontend-WebApplication 中并不能确保服务相同,基于注释的配置也不起作用

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 您想将这些模块部署为单独的战争文件吗?
  • 不一定。实际上,最终每个扩展都应该能够访问其他每个扩展。

标签: java spring tomcat web-applications modular


【解决方案1】:

如果您想使用 Tomcat,共享 Spring 上下文的唯一选择是仅设置一个 WebApplicaiton(由 WebApplicationInitializer 初始化)。当然,您仍然可以拥有带有自己的 @Configuration 类的单独模块(也称为 jar),但这些配置必须合并到 Web 应用程序中。

如果您决定使用 EAR 包装,它会更加灵活。然后,您仍然可以拥有两个独立的 WAR,具体取决于核心和后端服务。然后核心和后端服务可以共享为父 Spring 上下文(通过使用 beanRefContext),两个战争(前端 A 和前端 B)将扩展此上下文

【讨论】:

  • 只是出于好奇,您说“如果我想使用 Tomcat”,您对此有何建议?
  • 这是关于战争文件的 - 如果你想使用耳朵包装,你可以使用 TomEE
猜你喜欢
  • 2012-10-12
  • 1970-01-01
  • 2013-02-03
  • 2011-03-27
  • 2013-08-15
  • 2014-01-25
  • 2012-03-23
  • 2011-07-31
  • 2013-12-13
相关资源
最近更新 更多