EnableNeo4jRepositories.sessionFactoryRef игнорируется / ничего не делает

Я пытаюсь настроить проект Spring Boot 1.5.9 с несколькими источниками данных, некоторые из которых Neo4j. Используемая версия spring-data-neo4j - 4.2.9.

Моя цель - использовать разные SessionFactory для разных репозиториев, используя разные классы конфигурации для каждого.

У меня все это работает с 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.

Включение отладки в логгере и просмотр кода привели меня к SessionBeanDefinitionRegistrarPostProcessor, который содержит следующий код для получения sessionFactory:

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

Хммм... жестко заданные имена для бобов, никаких признаков настраиваемости.

Затем я дважды назвал свой боб, @Bean("sessionFactory", NEO4J_SESSIONFACTORY_NAME), так что вышеприведенный код пройдет.

Приложение запустилось, но проблема в том, что репозитории подключены к какому-либо компоненту, который называется sessionFactoryэффективно не используя sessionFactoryRef на аннотации.

Чтобы проверить это, я изменил имя в аннотации на несуществующий бин, и он продолжил запуск (если я делаю это с моно-аннотацией, приложение закрывается, потому что бин, упомянутый в mongoTemplateRef, недоступен).

Я покопался немного глубже и обнаружил, что для монго он получает ссылку на бин в этом классе. Эквивалентная реализация neo4j не имеет такой вещи. Конечно, это может быть деталью реализации, но я не смог найти никакой ссылки на sessionFactoryRef атрибут, отличный от аннотации и XML-схемы.

Есть также другие места в классах конфигурации, которые ожидают, что будет доступен только один SessionFactory.

Короче говоря, мне кажется, что EnableNeo4jRepositories.sessionFactoryRef не имеет реализации и поэтому просто ничего не делает. В результате в текущем коде должен присутствовать один компонент "sessionFactory", и все репозитории будут подключены к этому компоненту независимо от значения sessionFactoryRef.

Кто-нибудь еще с подобным опытом или идеи, как подать ошибку для этого?

0 ответов

Другие вопросы по тегам