我正在尝试在 Java EE 项目中同时使用 spring data solr 和 spring data mongo。问题是两者
和
尝试将 MongoOperations 和 SolrOperations 注入存储库。之后都创建存储库,然后我最终得到一个模棱两可的 cdi 依赖异常。在这里查看源代码
似乎没有办法区分 solr 存储库和 mongo 存储库。有什么解决办法吗?
我正在尝试在 Java EE 项目中同时使用 spring data solr 和 spring data mongo。问题是两者
和
尝试将 MongoOperations 和 SolrOperations 注入存储库。之后都创建存储库,然后我最终得到一个模棱两可的 cdi 依赖异常。在这里查看源代码
似乎没有办法区分 solr 存储库和 mongo 存储库。有什么解决办法吗?
我在使用 spring data neo4j 和 spring data mongo 时遇到了同样的问题。
CdiRepositoryExtensionSupport.java 中 afterBeanDiscovery() 的当前实现为所有存储库创建 bean 实例。当您使用多个 Spring-Data-xxx 时,上下文中有多个 bean 引用,并且会出现模棱两可的名称异常。
为了使它工作,我这样做:
之后……它起作用了!
也许这不是解决这个问题的最佳方法,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>{}
希望这有帮助!