EnableNeo4jRepositories.sessionFactoryRef被忽略/什么都不做

时间:2018-02-09 14:27:17

标签: spring-data-neo4j spring-data-neo4j-4 spring-data-neo4j-5

我正在尝试使用多个数据源配置Spring Boot 1.5.9项目,其中一些是Neo4j。 我正在使用的spring-data-neo4j的版本是4.2.9。

我的目标是为不同的存储库使用不同的SessionFactory,为每个存储库使用不同的Configuration类。

我已经将这一切都与Mongo一起工作了,但似乎即使sessionFactoryRef在@ EnableNeo4jRepositories上可用,也很简单,不会对它采取行动。

我的配置的缩写版本,包含一般概念:

@org.springframework.context.annotation.Configuration
@EnableNeo4jRepositories(basePackages = "<repo-package-name>", sessionFactoryRef = NEO4J_SESSIONFACTORY_NAME)
public class MyConfiguration {

protected static final String NEO4J_SESSIONFACTORY_NAME = "mySessionFactory";

@Bean(NEO4J_SESSIONFACTORY_NAME)
public SessionFactory mySessionFactory() {
    SessionFactory sessionFactory = ... 
    // passing entity package corresponding to repository
    return sessionFactory;
}

如前所述,这个结构可以正常使用spring-data-mongodb,但是在neo4j中它首先出现错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean named 'getSessionFactory' that could not be found.

Action:

Consider defining a bean named 'getSessionFactory' in your configuration.

在记录器中启用debug并查看代码导致我SessionBeanDefinitionRegistrarPostProcessor,其中包含以下代码以获取sessionFactory:

private static String getSessionFactoryBeanRef(ConfigurableListableBeanFactory beanFactory) {
    return beanFactory.containsBeanDefinition("sessionFactory") ? "sessionFactory" : "getSessionFactory";
} 

嗯... bean的硬编码名称,没有可定制性的迹象。

然后我继续命名我的bean两次,@Bean("sessionFactory", NEO4J_SESSIONFACTORY_NAME),所以上面的代码会通过。

应用程序已启动,但问题是存储库与所谓的sessionFactory bean连接,实际上没有在注释上使用sessionFactoryRef

为了测试这一点,我将注释上的名称更改为不存在的bean并继续启动(如果我使用mongo-annotation执行此操作,则应用程序退出,因为mongoTemplateRef中提到的bean不可用)

我挖了一点,发现,对于mongo,它在this class中检索bean引用。 equivalent neo4j implementation没有这样的事情。它当然可以是一个实现细节,但除了注释和xml架构之外,我无法找到对sessionFactoryRef属性的任何引用。

配置类中还有other个地方,只有一个SessionFactory可用。

因此,简而言之,在我看来EnableNeo4jRepositories.sessionFactoryRef没有实现,因此简单不做任何事情。 因此,使用当前代码,必须存在单个bean“sessionFactory”,并且无论sessionFactoryRef的值如何,所有存储库都将与此bean连接。

其他有类似经历的人还是知道如何为此提交错误?

0 个答案:

没有答案