古い質問がありましたが、埋め込まれたH2データベースをファイルに保存する方法を理解するのに多くの時間を費やしました。
@ebaxtは、接続文字列内に埋め込みデータベースの場所を設定できると述べています。 ファイルシステムの使用中~/
構文を、それを保存したい場合:
jdbc:h2:~/example/embeddedDb
あなたのプロジェクトフォルダ内に保存したい場合は、./
構文を使用する必要が
jdbc:h2:./example/embeddedDb
をこれはembeddedDb.mv.db
ファイルを作成します。ホームフォルダ内のexample
フォルダ、またはプロジェクトのルートフォルダ内のフォルダに保存します。 しかし、これは、アプリケーションが起動するたびにデータベースを消去します。この私はそれが存在していない場合にのみ、(私の場合はキュー)スキーマを作成するために、H2を伝えるためにINIT
プロパティを使用しないようにするには:
INIT=create schema if not exists Queue;
を次に、あなたのDDLスクリプトに次の文を存在しない場合は、テーブルを作成し使用する必要があり、
// create-db.sql
CREATE TABLE IF NOT EXISTS Queue (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
...
);
を、スクリプトにそれが接続されるたびに実行するためにH2を伝える:すべてのテーブルを作成するには、これをまとめる
// if you want to store the script in the file system
runscript from '~/example/create-db.sql'
// if you want to store the script in the project folder
runscript from './example/create-db.sql'
すると、CREにしなければならないものですこの方法では
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:~/example/EmbeddedDb;INIT=create schema if not exists Queue\; runscript from '~/example/create-db.sql'" />
<property name="username" value="embedded" />
<property name="password" value="embedded" />
</bean>
データベースは、アプリケーションがデータベースを実行する場合、または初めての場合にのみ作成されます。
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Bean
DataSource datasource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUsername("embedded");
dataSource.setPassword("embedded");
dataSource.setUrl("jdbc:h2:~/example/EmbeddedDb;INIT=create schema if not exists Queue\\; runscript from '~/example/create-db.sql'");
return dataSource;
}
またはXMLを使用して:データベース(EmbeddedDb)Javaの注釈方法で食べましたファイルが存在しません。それ以外の場合は、接続のみがロードされます。
また、次のBeanを追加し、hsqldbライブラリを使用して素敵なインターフェースを使用してデータベースの状態を監視することができます
import org.h2.tools.Server;
import org.hsqldb.util.DatabaseManagerSwing;
@Bean(initMethod = "start", destroyMethod = "stop")
public Server startDBManager() throws SQLException {
DatabaseManagerSwing.main(new String[] { "--url", "jdbc:h2:~/example/EmbeddedDb", "--user", "embedded", "--password", "embedded" });
return Server.createWebServer();
}
参考文献:
http://www.mkyong.com/spring/spring-embedded-database-examples/
http://www.h2database.com/html/features.html#embedded_databases(接続部にSQLを実行します)
達成したいことに関する詳細情報を提供できますか?別のデータベースに切り替えようとしていますか? –
データベースのURLは何ですか? –
私はH2データベースをメモリの代わりにディスクに保存したいと思っています。 – Pomario