Создание сессионной фабрики neo4j в SDN 5.0.0
Фон
У меня есть Maven, Spring data Neo4j проект. Он отправляет и получает один объект. Я пытаюсь добавить сеансы, но сталкиваюсь с ошибками.
Есть документы: https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/
Они предлагают это:
@Configuration
@EnableNeo4jRepositories(basePackages = "org.neo4j.example.repository")
@EnableTransactionManagement
public class MyConfiguration {
@Bean
public SessionFactory sessionFactory() {
// with domain entity base package(s)
return new SessionFactory(configuration(), "org.neo4j.example.domain");
}
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
ConfigurationSource properties = new ClasspathConfigurationSource("ogm.properties");
org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration.Builder(properties)
return configuration;
}
@Bean
public Neo4jTransactionManager transactionManager() {
return new Neo4jTransactionManager(sessionFactory());
}
}
Но когда я копирую второй @Bean
мои знаки затмения: new org.neo4j.ogm.config.Configuration.Builder(properties)
как красный и предлагает изменить конфигурацию типа на Builder. Затем продолжает предлагать изменения до 2-го @Bean
похоже:
@Bean
public Builder configuration() {
ConfigurationSource properties = new ClasspathConfigurationSource("ogm.properties");
Builder configuration = new org.neo4j.ogm.config.Configuration.Builder(properties);
return configuration;
}
Но тогда 1-й @Bean
перестает работать, потому что ожидает configuration()
,
Вопрос
Итак, как добавить сессионный завод, если предложение текущего документа не работает? Я посмотрел на многие другие примеры, но все они используют старые версии с устаревшими вещами, такими как Neo4jConfiguration
Заметки
Мой pom.xml не имеет родителей и этих зависимостей и репозиториев:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-neo4j</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.0.M3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>2.0.0.M3</version>
</dependency>
<dependency>
<groupId>com.voodoodyne.jackson.jsog</groupId>
<artifactId>jackson-jsog</artifactId>
<version>1.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-libs-release</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
ОБНОВЛЕНИЕ 1
Удаление всех @Bean
s и пробуем эту настройку: почему Neo4j OGM с Spring Boot 2.0.0.M4 явно требует встроенный драйвер? как это:
@Configuration
@EnableNeo4jRepositories("com.myproject.repository")
@EnableTransactionManagement
public class ServiceRegistryConfiguration {
@Bean
public org.neo4j.ogm.config.Configuration configuration() {
return new org.neo4j.ogm.config.Configuration.Builder(new ClasspathConfigurationSource("ogm.properties")).build();
}
@Bean
public SessionFactory sessionFactory() {
return new SessionFactory(configuration(), "com.myproject.domain");
}
}
привело к этой ошибке:
...Factory method 'configuration' threw exception; nested exception is java.lang.NullPointerException
мой ogm.properties
файл:
server.port=8585
spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=myuser
spring.data.neo4j.password=mypass
1 ответ
Ваша первоначальная конфигурация выглядит хорошо, за исключением отсутствия .build()
после создания экземпляра (это опечатка в документе).
Итак, инициализация конфигурации должна быть:
new org.neo4j.ogm.config.Configuration.Builder(properties).build();
О втором: вы не можете смешивать конфигурацию стиля SDN и автоматическую конфигурацию Spring Boot.
Либо вы используете стиль SDN (как в вашем первом фрагменте кода) и ogm.properties
файл выглядит так:
URI=bolt://localhost
username=myUser
password=myPassword
Пример здесь
ИЛИ вы используете автоконфигурацию Spring Boot, тогда нет необходимости объявлять конфигурацию, sessionFactory и менеджер транзакций в классе конфигурации. Просто аннотируйте конфигурацию с помощью
@EnableNeo4jRepositories("com.myproject.repository")
@EntityScan(basePackages = "com.myproject.domain")
и используйте формат свойств весенней загрузки:
spring.data.neo4j.uri=bolt://localhost
spring.data.neo4j.username=myuser
spring.data.neo4j.password=mypass
Пример здесь
Учитывая NullPointerException
это потому что ogm.properties
файл не найден в пути к классам.