小编典典

在Maven多模块项目中无法正常运行bean的Spring Boot自动装配

spring-boot

在使用Spring
Boot和Maven将项目模块化为不同的独立Maven项目时,我们遇到了一个问题,即多模块Maven项目中的bean自动装配无法正常工作。

为了给您一个概述,下面是到目前为止开发的独立Maven项目

  1. Coreservices –包含整个应用程序的spring boot domain对象:输出JAR
  2. DBservices1-包含用于启动数据库的Spring Boot存储库和服务(数据库服务):输出JAR
  3. Rewards-包含与Rewards模块相关的文件(控制器,服务(业务逻辑服务),视图):输出JAR
  4. RewardsApp-独立的可部署Maven项目:输出WAR

下面是依赖关系结构RewardsApp-> Rewards-> DBservices1-> Coreservices

问题是@AutowiredRewards中使用的注释和DBservices1来获取带有@Service/
注释的映射服务@RepositoryRewardsAppProject 中不可用。

作为一种变通方法,我们在配置的豆类RewardsApp@Bean注释,那么服务提供给服务器成功启动。使用这种方法,我们需要手动配置RewardsApp相关项目中使用的所有bean
。我们的应用程序中有很多服务和存储库,我们认为像这样创建bean并不是一种正确的方法,因为需要创建许多bean。

请注意,我们已经在软件包下的所有项目中创建了所有的Spring Boot控制器,服务,存储库 com.company.application

以下是主要课程的代码段:

@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();
}

阅读 1109

收藏
2020-05-30

共1个答案

小编典典

通过在RewardsApp.java中添加以下注释对我有用,现在自动装配正在罐中的类工作

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

我猜上面是针对服务,实体(域),存储库的

2020-05-30