0

ContexteCréation d'une SessionFactory Neo4j dans NRS 5.0.0

J'ai un projet Maven, les données du printemps Neo4j. Il poste et obtient un seul objet. J'essaie d'ajouter des sessions, mais je rencontre des erreurs.

Il y a docs: https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/#reference:session

Ils conseilleriez:

@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()); 
    } 

} 

Mais quand je copie le second @Bean mes marques d'éclipse: new org.neo4j.ogm.config.Configuration.Builder(properties) en rouge et suggère que je change la configuration de type à Builder. Ensuite garde suggérant des changements jusqu'à ce que la 2ème @Bean ressemble:

@Bean 
public Builder configuration() { 
    ConfigurationSource properties = new ClasspathConfigurationSource("ogm.properties"); 
    Builder configuration = new org.neo4j.ogm.config.Configuration.Builder(properties); 
    return configuration; 
} 

Mais le 1er @Bean cesse de fonctionner parce qu'elle attend un configuration().

Question

Alors, comment faire ajouter une SessionFactory lorsque la suggestion du document actuel ne fonctionne pas? Je l'ai regardé beaucoup d'autres exemples, mais ils utilisent tous les anciennes versions avec des choses comme dépréciées Neo4jConfiguration

Remarques

Mon pom.xml n'a pas de parents et ces dépendances et dépôts:

<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> 

MISE À JOUR 1

En supprimant tout @Bean s et en testant cette personne: Why does Neo4j OGM with Spring Boot 2.0.0.M4 apparently require the embedded driver? comme ceci:

@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"); 
    } 

} 

a donné lieu à cette erreur:

...Factory method 'configuration' threw exception; nested exception is java.lang.NullPointerException 

mon fichier ogm.properties est:

server.port=8585 
spring.data.neo4j.uri=bolt://localhost 
spring.data.neo4j.username=myuser 
spring.data.neo4j.password=mypass 

Répondre

2

Votre configuration initiale semble bon, sauf qu'il ya un manque .build() après l'instanciation du constructeur (c'est une faute de frappe dans le document).

Ainsi, la init configuration doit être:

new org.neo4j.ogm.config.Configuration.Builder(properties).build(); 

A propos du 2ème: vous ne pouvez pas mélanger la configuration de style et NRS Spring Boot configuration automatique.

Soit vous utilisez le style NRS (comme dans votre premier extrait de code) et le fichier ogm.properties ressemble à:

URI=bolt://localhost 
username=myUser 
password=myPassword 

Exemple here

OU vous utilisez Spring automatique Boot -configuration alors inutile de déclarer la configuration, sessionFactory et le gestionnaire de transaction dans la classe de configuration. Juste annoter la configuration avec

@EnableNeo4jRepositories("com.myproject.repository") 
@EntityScan(basePackages = "com.myproject.domain") 

et utiliser le format des propriétés de démarrage du printemps:

spring.data.neo4j.uri=bolt://localhost 
spring.data.neo4j.username=myuser 
spring.data.neo4j.password=mypass 

Exemple here

En ce qui concerne la NullPointerException: c'est parce que le fichier ogm.properties ne se trouve pas dans le chemin de classe.