2017-09-22 5 views
0

J'ai testé Spring Boot 2 (2.0.0.M4 à ce stade) avec le dernier Spring Data Neo4j (actuellement 5.0.0.RC3) et je n'arrive pas à le faire fonctionner.Pourquoi Neo4j OGM avec Spring Boot 2.0.0.M4 nécessite apparemment le pilote intégré?

je reçois l'erreur suivante:

org.neo4j.ogm.exception.ConfigurationException: Could not load driver class org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver 

Je ne demande pas un pilote embarqué, je ne veux un. Je veux seulement utiliser le pilote de boulon, qui est déjà une dépendance de spring-data-neo4j.

J'ai publié un project to Github qui a été construit en utilisant la sortie de Spring Initializr qui peut être exécuté pour exposer l'erreur.

Pour référence, mon build.gradle est la suivante. Ai-je mal configuré mon projet? Ou y a-t-il quelque chose de plus grave dans les versions actuelles de Spring et de Neo4j?

buildscript { 
    ext { 
     springBootVersion = '2.0.0.M4' 
    } 
    repositories { 
     mavenCentral() 
     maven { url 'https://repo.spring.io/snapshot' } 
     maven { url 'https://repo.spring.io/milestone' } 
    } 
    dependencies { 
     classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" 
    } 
} 

apply plugin: 'java' 
apply plugin: 'idea' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'io.spring.dependency-management' 

version = "0.0.1-SNAPSHOT" 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

repositories { 
    mavenLocal() 
    mavenCentral() 
    maven { url "https://repo.spring.io/snapshot" } 
    maven { url "https://repo.spring.io/milestone" } 
} 

dependencies { 
    compile "org.apache.tomcat.embed:tomcat-embed-jasper" 
    compile "org.springframework.boot:spring-boot-starter-web" 
    compile "org.springframework.boot:spring-boot-starter-data-neo4j" 
    runtime "org.springframework.boot:spring-boot-devtools" 
} 

Le reste du code est disponible dans Github comme je l'ai mentionné plus tôt.

Répondre

2

Vous n'avez pas la dépendance du pilote intégré partout, voir

./gradlew dependencies 

sortie et la recherche pour neo4j-ogm.*driver - seul pilote Neo4j-ogm-boulon est présent. Donc, si vous voulez utiliser uniquement les boulons, vous avez correctement configuré les dépendances.

La raison pour laquelle vous voyez cette exception est parce que vous la configuration est erronée:

return new SessionFactory("com.example.domain"); 

Cela ne fournit pas chemin vers le fichier de configuration, la valeur par défaut est alors la base de données impermanent intégrée, qui a besoin du pilote intégré - donc l'éxéption.

Vous avez deux options

  • passe configuration à SessionFactory: message d'accueil

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

    méfiez-vous que ce message d'accueil seule solution et ne supporte pas les fichiers YML. Utiliser la configuration automatique de démarrage de ressort pour SDN - il suffit de supprimer la classe Neo4jConfiguration, Spring Boot détectera qu'il n'y a pas de bean SessionFactory et configurera tous les requis (y compris le gestionnaire de transactions). Gardez votre classe Application et application.yml tel quel.

+0

Ah, oui, la deuxième option est ma préférée, merci, je vais essayer. – ben3000

+0

Merci, cela a clairement corrigé le problème, et est un bon rappel à la RTFM plus attentivement. – ben3000