带有 H2 的永久数据库

Posted

技术标签:

【中文标题】带有 H2 的永久数据库【英文标题】:Permanent database with H2 【发布时间】: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 属性,插入到表中也是成功的,即使从技术上讲不应该存在表。 【参考方案1】:

我使用的是弹簧靴。原来 spring-boot 生成了自己的 H2 数据库。这意味着我有两个独立的数据库,一个是我尝试使用的,另一个是我实际使用的(只有内存中的一个)。

【讨论】:

【参考方案2】:

可以尝试在 config/ 属性文件中将自动提交设置为 true。它可能有效

【讨论】:

以上是关于带有 H2 的永久数据库的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中使用带有 H2 的 Hibernate 时出错

带有 h2 嵌入式数据库的 MySQL LONGTEXT

在 AWS 上部署带有 H2 数据库的 Spring Boot 应用程序

带有忽略大小写的 JDBC URL 不适用于 H2 数据库连接

带有 Spring JPA 的 H2 中的几何数据类型

是否可以在带有 h2 或 sybase 数据库的 android 上使用 ormlite?