我有 10 多个 Spring Boot 应用程序,它们可以构建为 war 文件并部署在应用程序服务器中,或者单独运行。每个应用程序都包含业务运营所需的唯一代码、功能和 RESTful 服务。
我的包结构如下:
WebServices (Gradle project)
|---A (Gradle project)
|---B (Gradle project)
|---C (Gradle project)
服务 A、B 和 C 都被打包并作为战争运行。
但是,我还想提供启动一个包含所有服务的“大型”服务器的选项,而不必单独启动每个应用程序或让主应用程序服务器陷入大型 Spring Boot 战争。
理想情况下,这将通过另一个 Spring Boot 应用程序使用 ComponentScan 来包含来自所有其他服务的功能。我打算让 Spring Boot 应用程序X引用服务A、B和C中的功能。
问题在于上下文。我的每个服务在通过应用程序服务器启动时,都会根据 war 文件的名称自动分配一个上下文。例如,如果我在应用程序A中具有安全功能,因为它包含我登录时使用的敏感信息:
/安全/登录
其中security是战争文件 (security.war) 的名称。
为了在独立运行时弥补这一点,我为上下文设置了一个应用程序属性以匹配 war 文件名server.servlet.context-path: /security
。这使我可以维护使用我的任何一种部署方法部署的相同端点天气。
现在,当我使用组件扫描启动引用项目A、B和C的服务器X时,我失去了应用程序A中的安全上下文,我的端点现在被访问为:@ComponentScan(basePackages = {"com.package.a.*", "com.package.b.*", "com.package.c.*"})
/登录
应用程序A、B或C之间没有区别。
所以,我的问题是如何根据被扫描的组件维护单个上下文,甚至基于上下文的路由?