我有2个项目,主要的春季启动项目和第二个春季项目,其中包含@Contollers,@Services等。@ComponentScan从2包
我尝试在主项目中使用这些服务。我看到了类似的问题,如here,here,here和许多人一样,但它并不适合我
1)的工作,如果我刚才
@SpringBootApplication
public class App { ... }
那么它不会因为编译无法找到服务第二个项目
2)如果我尝试扫描第二包
@SpringBootApplication
@ComponentScan("secondPackage")
public class App {}
然后应用程序ST艺术没有错误,但控制器映射根本不起作用。来自两个项目的映射无法解决。
3)然后我试图排除来自第二个包的控制器,因为我不需要他们,映射仍然不起作用
@ComponentScan(basePackages="secondPackage", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})
4)然后我试图扫描特定的服务,但在这种情况下,其他资源不可用,我必须包括对多路径
@ComponentScan({"first package", "second package"})
5)最后,我试图让2个配置文件
@Configuration
@ComponentScan(basePackages = {"mainPackage"})
public class MainConfiguration {
}
@Configuration
@ComponentScan(basePackages="secondPackage",
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION, value = Controller.class)})
public class SecondConfiguration {
}
但我没有找到示例,我如何在SpringApplication.run(App.class,args)之前准备上下文;然后让应用程序以我的上下文运行。像
ApplicationContext myContext = new AnnotationConfigApplicationContext(OrderStatusConfiguration.class, ShopRuServicesConfiguration.class);
SpringApplication.run(App.class, myContext, args);
所以,请给我一个建议,为什么映射不工作或我应该如何正确的从第二个项目自动装配服务!
我感谢任何帮助!谢谢!
我认为在两个不同的SpringBoot应用程序上下文之间共享代码的想法违背了有两个应用程序的整个想法。我建议使用共享代码创建第三个SpringBoot项目,并通过RestAPI公开功能。 – Fernando
第二个应用程序是普通的spring mvc应用程序,在第一个spring引导应用程序中需要大约30%的类。实施休息服务是我的第一个想法,但它不是一种选择,因为那么整个工作将在一台服务器上执行,其中位于第二个应用程序的位置。那个服务器已经超载 – Slava
当然我可以复制所有的代码,但是比改变的情况下,我将不得不改变几个地方而不是一个。我认为,必须有某种方式来重用另一个模块的服务,这是作为依赖关系包含的 – Slava