SpringBoot无法找到Mongo存储库

时间:2018-05-18 02:29:25

标签: java spring mongodb spring-boot spring-data-jpa

我有一个问题,我想在我的应用中添加第二个mongo数据库。我这样做是通过添加第二个使用配置前缀然后使用特定bean名称的MongoTemplate。

我有一个像这样的AbstractMongoConfig

public abstract class AbstractMongoConfig {
    private String uri;

    public void setUri(String uri) {
        this.uri = uri;
    }

    public MongoDbFactory mongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(new MongoClientURI(uri));
    }

    abstract public MongoTemplate getMongoTemplate() throws Exception;                                                                        }

我将其扩展到这样的特定模板配置中...要添加另一个mongo数据库,我会添加其中一个,然后注释不同的存储库以通过templateRef使用不同的配置,对吗?

@Configuration
@ConfigurationProperties(prefix="server.mongodb")
public class ServerMongoConfig extends AbstractMongoConfig {
    @Primary
    @Override
    @Bean(name="serverMongoTemplate")
    public MongoTemplate getMongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

有了这个,我应该能够配置像server.mongodb.uri = ...

这样的配置

我有一个使用此

的回购
@Repository
public interface MAPRepository extends MongoRepository<MAP, String> {
    public List<MAP> findByName(String name);
}

和实体

@Document(collection="maptest")
public class MAP {
    @Id
    private String id;
    private String name;
}

然后我有一个使用此repo的服务类

@EnableMongoRepositories(mongoTemplateRef="serverMongoTemplate")
@Service
public class TestService {
    @Autowired
    @Qualifier(value = "serverMongoTemplate")
    private MAPRepository mrepo;

    ... use mrepo ...
}

但是当开始这个时我得到一个错误

Description:

Field mrepo in testpkg.svc.TestHandler required a bean of type 'testpkg.repo.MAPRepository' that could not be found.

Action:

Consider defining a bean of type 'testpkg.repo.MAPRepository' in your configuration.

并降低......

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'testpkg.repo.MAPRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=serverMongoTemplate)}

该服务与存储库位于不同的包中,但我检查了导入以及所有这些...它们都匹配得很好。 MAPRepository是用@Repository注释的,这意味着它应该可以作为bean使用,对吗?

这里还有什么可能导致它看不到豆子?是否有一些课程我可以打开调试来弄清楚发生了什么?

在我添加ServerMongoConfig之前,它运行正常。它能够毫无问题地写入该数据库。刚才它无法正确实例化。

1 个答案:

答案 0 :(得分:0)

答案似乎是@EnableMongoRepositories需要有一个basePackages引用包含新模板的正确包,否则我想mongoTemplateRef无法正确找到它。

所以,在服务类上:

@EnableMongoRepositories(basePackages={"testpkg.repo"}, mongoTemplateRef="serverMongoTemplate")

一切正常。

相关问题