Java 基于目录的Spring引导数据库

Java 基于目录的Spring引导数据库,java,jpa,derby,spring-boot,Java,Jpa,Derby,Spring Boot,我想使用SpringBoot的存储库特性连接到基于目录的Derby数据库。经过多次努力,我意识到我一直连接的derby DB只是一个内存中的数据库。我有没有办法指定数据库应该存储在文件系统而不是内存中?我希望在我的JVM被杀死后,我的数据库被持久化(并且能够被访问) 我已尝试使用application.properties中的以下属性指定Derby连接URL以使用基于目录的数据库: spring.datasource.url=jdbc:derby:directory;create=true 我

我想使用SpringBoot的存储库特性连接到基于目录的Derby数据库。经过多次努力,我意识到我一直连接的derby DB只是一个内存中的数据库。我有没有办法指定数据库应该存储在文件系统而不是内存中?我希望在我的JVM被杀死后,我的数据库被持久化(并且能够被访问)

我已尝试使用application.properties中的以下属性指定Derby连接URL以使用基于目录的数据库:

spring.datasource.url=jdbc:derby:directory;create=true
我的属性确实被读取和使用,但是数据库在JVM启动和关闭之间仍然没有持久化数据。看起来像是在我的“Derby.system.home”系统属性指定的位置创建了一个Derby DB目录结构,但是当我重新启动JVM时,它不包含旧JVM中存储的任何数据


提前谢谢

如果正在创建数据库目录,但您的数据没有持久化,则需要检查多种情况

首先,您是否提交了您的事务

要在较低级别检查您指示Derby执行的操作,请修改应用程序以指定Derby.language.logStatementText=true,如下所述:


然后在运行应用程序后检查derby.log,查看您对derby执行的语句以及derby对这些语句的处理。

我假设您使用的是Hibernate。如果是这样的话,
spring.jpa.hibernate.ddl auto的配置很重要。当您使用嵌入式数据库(如Derby)时,Boot默认为
createdrop
。当您关闭应用程序时,删除部分将导致Hibernate删除所有数据库表

您应该更改此配置以更好地满足您的需要。例如,使用
none
并使用
schema.sql
文件创建架构


您可以找到有关Boot支持数据库初始化的更多信息。

您是我的英雄!这完全奏效了。我总是用“创建拖放”,我把它改为“更新”,一切都正常了。我想我应该读一下这个领域的文档。非常感谢你的帮助。对不起,我不能给你投票,因为我没有足够的代表。