我有一个问题,我想在我的应用中添加第二个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之前,它运行正常。它能够毫无问题地写入该数据库。刚才它无法正确实例化。
答案 0 :(得分:0)
答案似乎是@EnableMongoRepositories需要有一个basePackages引用包含新模板的正确包,否则我想mongoTemplateRef无法正确找到它。
所以,在服务类上:
@EnableMongoRepositories(basePackages={"testpkg.repo"}, mongoTemplateRef="serverMongoTemplate")
一切正常。