我正在尝试在Java EE项目中同时使用spring数据solr和spring数据mongo。问题是
和
尝试将MongoOperations和SolrOperations注入存储库。之后两者都创建了存储库,然后我最终得到了一个模糊的cdi依赖项异常。看一下这里的源代码
似乎没有办法区分solr存储库和mongo存储库。有没有解决方案?
答案 0 :(得分:1)
我面临与spring数据neo4j和spring data mongo相同的问题。
CdiRepositoryExtensionSupport.java中的afterBeanDiscovery()的当前实现为所有存储库创建bean实例。当您使用多个Spring-Data-xxx时,上下文中会有多个bean引用,并且会出现ambigous名称异常。
为了让它能够发挥作用:
之后...它有效!
也许这不是解决此问题的最佳方法,Spring Data项目的人员可以找到更好的解决方案
CdiRepositoryExtensionSupport.java
void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery, BeanManager beanManager) {
for (Entry<Class<?>, Set<Annotation>> entry : getRepositoryTypes()) {
Class<?> repositoryType = entry.getKey();
Set<Annotation> qualifiers = entry.getValue();
if (repositoryType.isAnnotationPresent(MongoRepositoryCdi.class)) {
// Create the bean representing the repository.
CdiRepositoryBean<?> repositoryBean = createRepositoryBean(repositoryType, qualifiers, beanManager);
if (LOG.isInfoEnabled()) {
LOG.info(String.format("Registering bean for %s with qualifiers %s.", repositoryType.getName(), qualifiers));
}
// Register the bean to the container.
registerBean(repositoryBean);
afterBeanDiscovery.addBean(repositoryBean);
}
}
}
存储库
@Eager @MongoRepositoryCdi public interface TestDocumentRepository extends MongoRepository<TestDocument, String>{}
希望这有帮助!