老问题,但我花了很多时间搞清楚如何将一个嵌入式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