Spring Boot在maven多模块项目中,自动装配bean不起作用

问题描述:

尽管使用spring boot和maven将我们的项目模块化为不同的独立maven项目,但我们遇到了一个问题,那就是多模块maven项目中的bean自动装配不起作用。Spring Boot在maven多模块项目中,自动装配bean不起作用

只给你这个问题的概述,下面是迄今为止开发独立的Maven项目

  1. Coreservices - 包含整个应用程序的春天启动域对象:输出JAR
  2. DBservices1 - 包含弹簧启动存储库和服务(数据库服务)来访问数据库:输出JAR
  3. 奖励 - 包含奖励模块相关的文件(控制器,服务(业务逻辑服务),查看):输出JAR
  4. RewardsApp-独立DEPL oyable Maven项目:输出WAR

下面是依赖结构 RewardsApp->奖励 - > DBservices1 - > Coreservices

的问题是奖励和DBservices1用于获取映射服务@Autowired注解与@Service/@Repository不适用于RewardsApp项目。

作为解决方法,我们已经使用@Bean注释配置了RewardsApp中的bean,然后这些服务可供服务器成功启动。 通过这种方法,我们需要手动配置依赖项目中使用的RewardsApp中的所有bean。 我们的应用程序中有许多服务和存储库,我们认为创建这样的bean并不是一个正确的方法,因为需要创建许多bean。

请注意,我们已经创造下 包com.company.application

下面所有的春天启动控制器,服务,repositorys在所有项目的主类的片段:

@SpringBootApplication 
@ComponentScan(basePackages = {"com.company.application"}) 
public class RewardsApp extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(RewardsApp.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(RewardsApp.class); 
    } 
} 

/** 
*Manual beans in RewardsApp 
**/ 
@Bean 
public SomeService someService() 
{ 
    return new SomeService(); 
} 
+0

com.company.application'包中是否还有'RewardsApp'?如果没有放在那里或'com.company'包中,并删除'@ ComponentScan'(这已经被@ ComponentScan所隐含)。 –

通过RewardsApp.java添加下面的注释的伎俩对我来说,现在自动装配工作为类的罐子

@ComponentScan(basePackages = {"com.company"}) 
@EntityScan(basePackages = {"com.company"}) 
@EnableJpaRepositories(basePackages = {"com.company"}) 

我想上面是服务里面,实体(域),知识库

一下怎么样配置类(与相关的比较扫描)为每个模块和导入这些配置到您的应用程序类?

@SpringBootApplication 
@ComponentScan(...) 
@Import({RewardsContext.class, DBservicesContext.class}) 
... 

Import docs here