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.
Кто-нибудь еще с подобным опытом или идеи, как подать ошибку для этого?