[英]SpringBoot fails to find Mongo Repository
我在尝试将第二个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 DB,我将添加其中一个,然后通过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;
}
然后,我有一个使用此仓库的服务类
@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可用,对吗?
还有什么可能导致这里看不到bean? 我可以打开一些类来了解发生什么情况吗?
在添加ServerMongoConfig之前,它工作正常。 它能够毫无问题地写入该数据库。 刚才它无法正确实例化它。
答案似乎是@EnableMongoRepositories需要具有一个basePackages,该basePackages引用包含新模板的正确软件包,否则我猜mongoTemplateRef无法正确找到它。
因此,在服务类上:
@EnableMongoRepositories(basePackages={"testpkg.repo"}, mongoTemplateRef="serverMongoTemplate")
而且一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.