老問題,但我花了很多時間搞清楚如何將一個嵌入式H2數據庫保存到一個文件,我想分享我學到的東西。
由於@ebaxt表示可以在連接字符串中配置嵌入式數據庫的位置。 如果您希望將其保存在文件系統中使用~/
語法:如果您想保存您的項目文件夾內
jdbc:h2:~/example/embeddedDb
你必須使用./
語法
jdbc:h2:./example/embeddedDb
這將創建embeddedDb.mv.db
文件在您的主文件夾內的example
文件夾中或您的項目根文件夾中。 但是這會在每次應用程序啓動時擦除數據庫。爲了避免這種情況,我用的INIT
屬性來告訴H2,以創建模式(隊列在我的情況),只有當它不存在:
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什麼吃了Java註解的方式數據庫(EmbeddedDb):
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:
<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>
用這種方法,只有當它是第一次在應用程序運行的數據庫將被創建或者數據庫文件不存在。否則,只有連接將被加載。
還可以監視與使用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 DB存儲在磁盤中而不是內存中(就像我現在這樣)。 – Pomario