【发布时间】:2015-05-10 18:04:52
【问题描述】:
我希望将我的 H2 数据库存储到一个文件中,这样一旦我关闭应用程序并再次打开它,之前写入数据库的所有数据仍然存在,但出于某种原因,此时无论何时我启动应用程序,数据库完全是空的。有什么建议吗?
@Bean
public DataSource dataSource() {
File f = new File(".");
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:file:" + f.getAbsolutePath() + "/db/aurinko");
ds.setUser("");
ds.setPassword("");
return ds;
}
private Properties getHibernateProperties() {
Properties prop = new Properties();
prop.put("hibernate.format_sql", "true");
prop.put("hibernate.show_sql", "false");
prop.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
prop.put("hibernate.hbm2ddl.auto", "update");
return prop;
}
@Bean
public SessionFactory sessionFactory() throws IOException {
LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource());
builder.scanPackages("io.aurinko.server.jpa").addProperties(getHibernateProperties());
SessionFactory result = builder.buildSessionFactory();
return result;
}
【问题讨论】:
-
打印出您用于连接的 URL。我怀疑这不是你想要的。
-
jdbc:h2:file:C:/users/kjanowsk/workspace/aurinko/db/aurinko
-
您的项目设置中是否有某种“清理”任务处于活动状态?如果是,那么可能是这个任务“清理”了数据库目录/文件
-
不。我刚开始这个项目。您可以在此处看到的配置几乎就是我目前的全部配置。
-
但我得到的印象是 spring 自己在后台做一些事情。即使我删除了数据库文件并删除了 hibernate.hbm2ddl.auto 属性,插入到表中也是成功的,即使从技术上讲不应该存在表。