アプリケーションにDBを組み込めると、テスト時やアプリケーションの構成を単純にしたいときにうれしいです。
SpringBootアプリケーションでSQLなDBを使用する場合、DBにH2を選べば特に設定しなくても組み込みで使用できます。便利ですね。同様にNeo4jを組み込みで使用ようとした時に少々手間取ったので、その方法をメモとしてここに残します。
■ 基本的なコード
プロジェクトのひな型は「SPRING INITIALIZR」で簡単に作成できます。また、「SpringData Neo4j」の「クイックスタートページ」に分かりやすいサンプルコードがあります。ただし、Neo4jサーバに接続するコードになっています。次のコードの「uri」の部分です。
1 2 3 4 5 6 | @Bean public org.neo4j.ogm.config.Configuration configuration() { return new org.neo4j.ogm.config.Configuration.Builder() .uri("bolt://localhost") .build(); } |
■ 組み込みで使用する場合の「uri」について
「SpringData Neo4j」の「リファレンスマニュアルの組み込みドライバ設定方法」をみると、この「uri」の部分を下記のように「file」にすると良いようです。
1 2 3 4 | @Bean new Configuration.Builder() .uri("file:///c:/tmp/neo4j")※1,2 .build(); |
※1 Windows環境の場合、URI(Path)の表記が「file:///ドライブ名:/」という形になります。「file://c:/tmp」というような、「/」が一つ足りない記述をすると下記のような例外が発生します。 気をつけてください。(→自分)
1 | java.lang.IllegalArgumentException: URI has an authority component |
※2 「uri」を省略するとJVMのシャットダウン時に削除される一時ファイルを利用した使い捨てデータストアとして使用できます。
■ 依存ライブラリの追加
「SPRING INITIALIZR」で生成したプロジェクトは、組み込みで使用する想定をしていません。依存ライブラリが足りずに下記のような例外が発生します。
1 2 3 4 5 6 | ・組み込みDriverクラスがない Caused by: java.lang.ClassNotFoundException: org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver ・Neo4j本体のクラスがない Caused by: java.lang.ClassNotFoundException: org.neo4j.graphdb.GraphDatabaseService |
次のような依存を一行だけ追記するとNeo4j本体とドライバーライブラリが組み込まれます。(gradleの場合)
1 | compile('org.neo4j:neo4j-ogm-test:3.1.0')※ |
※SpringBoot、Neo4j本体、ドライバなどのバージョンの組み合わせは、「バージョンテーブル」を参照してください。正しい組み合わせでない場合、動作しないことがありました。
■ まとめ
SpringBootアプリケーションで組み込みでNeo4jを使いたい場合、次の設定をします。
- Configurationの「uri」に「file://」を設定。もしくは、uriを設定しない。
- 依存ライブラリにNeo4j本体と組み込みドライバーライブラリを追加する。
以上です。