代码之家  ›  专栏  ›  技术社区  ›  user3629892

springboot scanbasepacks在不同的jar中找不到存储库

  •  3
  • user3629892  · 技术社区  · 8 年前

    我有一个像这样的Spring Boot应用程序:

    package my.package;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration;
    import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration;
    
    @SpringBootApplication
    public class MySpringBootApp{
    
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApp.class, args);
        }
    
    }
    

    包裹里有服务 my.package.service

    @Service
    public class MyService {
    
    private ServiceInADifferentJar  dep;
    
    public MySerivce(ServiceInADifferentJar dep) {
    this.dep = dep;
    }
    
    }
    

    班级 ServiceInADifferentJar 是一个 @Service 另一个jar中的注释类,我将其作为maven依赖项包含。

    jar具有以下文件结构:

    src/main/java
    - some.package.repository
        MyRepository.java
    - some.package.service
        ServiceInADifferentJar.java
    

    MyRepository 是一个 @Repository 扩展spring数据惰性面的带注释接口。

    不同的服务jar 得到 肌库 注入到它的构造函数中。

    当我启动应用程序时,我得到一个错误 不同的服务jar 找不到。

    然后我把这个添加到我的SpringBootApp中

    @SpringBootApplication(scanBasePackages = {"some.package"})
    

    不同的服务jar 找到了,但没有 肌库 .

    为什么不?为什么不是所有的子包 some.package 在另一个扫描过的罐子里?

    *编辑*

    储存库

    package some.package.repository;
    
        @Repository
        public interface MyRepository extends MongoRepository<SomeEntity, String> {
    
        }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Arnaud    8 年前

    您可能想使用 EnableMongoRepositories 注释,以便找到您的mongo存储库。

    @EnableMongoRepositories(basePackages = "some.package.repository")
    

    下面的问题,尽管是关于jpa存储库的,但对存储库扫描的工作原理有了更多的解释:

    Can't Autowire @Repository annotated interface in Spring Boot

        2
  •  0
  •   Sebastian Salazar    8 年前

    嘿,伙计,你应该把这个放在你的主课@springbootsapplication标签后面 @组件扫描(basepackages={“some.package”})