web-dev-qa-db-ja.com

INIT = RUNSCRIPTと相対パスに関する問題

ソースパス(src/main src/test)にMavenの規則を使用しており、SQLスクリプトをsrc/main/resources/scriptsに配置しています。

H2メモリでアプリを実行したいのですが、jdbc urlを使用してdbを初期化したいと思います。

database.url=jdbc:h2:mem:;INIT=RUNSCRIPT FROM 'src/main/resources/scripts/create.sql';

私の問題は、この相対パス(src/main/...)が機能しないこと、およびinit = runscriptコマンドが何も対象としていない場合にH2がクラッシュしないことです。

誰かが私がこれを機能させるために使用すべきパスを知っていますか?

ありがとう

48
Maxime ARNSTAMM

次のURLを使用できます。
"jdbc:h2:mem:sample;INIT=RUNSCRIPT FROM 'classpath:scripts/create.sql'"

これを使用すると、クラスパスからスクリプトを実行できます。したがって、Maven(またはその他の)プロジェクトにsrc/main/resources/scriptsまたはsrc/test/resources/scriptsを置くだけで済みます。

87
viktortnk

最初に絶対パスを使用して、すべてが機能することを確認することをお勧めします。その後、クラスパスを確認してください。例えば、 bin/main/resources/scripts/create.sqlbinはクラスがコンパイルされる場所であり、クラスパス上にあると想定しています。

ソースが存在するsrcは通常クラスパス上にないため、これが問題の原因である可能性があります。

2
darioo