我有2个Spring引导jar,可以作为2个独立的应用程序正常工作,但是,我被要求将2个jar合并到一个应用程序中
我认为最简单的方法是将app-2作为maven依赖项添加到app-1中,但问题是当app-1启动时,它只能识别app-1 REST端点,而忽略app-的REST端点总共2个。
我希望当app-1启动时,它将自动选择app-2中声明的端点
@RestController
Class2{
@GetMapping(/hello-from-app2)
public String myapp2(){
return "HELLO FROM APP2"
}
此代码将被忽略,并且在服务器启动时,我只能看到由app-1公开的端点是可见的。
答案 0 :(得分:2)
如果将App2.jar作为依赖项包含到App1.jar中,则最好的方法是导入App2的配置。 如果您开始添加扫描和其他内容,则会将App1与App2紧密耦合。 App1必须知道不需要的App2实施细节。
如果仅导入App2的配置,则配置详细信息将保持封装。
我假设您有一个针对App1的Java Config类(或XML Config文件),另一个针对App2。我还假设App2的配置包含所有用于组件扫描的必需注释和正确的基本软件包。
在这种情况下,您可以添加这样的导入,并且该导入应立即生效:
@Configuration
@Import(SpringConfigurationApp2.class)
public class SpringConfigurationApp1 {
//... some beans....
}
答案 1 :(得分:1)
我看到了@Diego提供的答案,但是该用户需要在客户端应用程序中进行更改。 (例如@Import(SpringConfigurationApp2.class)
。)。
我还有另一种方法,其中客户端(App-1)不需要在应用程序中进行任何更改。它将无缝运行。这种方法是通过使用spring的自动配置,并且spring-boot依赖项使用了相同的功能。
这是我使用自动配置实现的答案。
对于App-2,
1)在resources / META-INF下创建spring.factories
文件
2)添加org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
path-to-app-2-application/SpringConfigurationApp2
对于App-1, 只需将App-2包含为maven依赖项,就可以完成了。
这里是一个链接,可获取有关https://dzone.com/articles/what-is-spring-boot-auto-configuration的更多信息。