Spring Boot基于目录的数据库

问题描述:

我想使用spring-boot的存储库功能连接到基于目录的Derby数据库。在经历了很多困难之后,我意识到我保持连接的德比DB只是一个内存数据库。有没有办法让我指定数据库应该存储在文件系统而不是内存?我希望我的数据库在我的JVM被终止后被持久化(并能够被访问)。Spring Boot基于目录的数据库

我已经试过指定德比连接URL使用application.properties以下属性以使用基于目录的数据库:

spring.datasource.url=jdbc:derby:directory;create=true 

我的财产没有得到阅读和使用,但数据库还是没有在JVM加载和关闭之间保留数据。看起来好像在我的“derby.system.home”系统属性指定的位置创建了Derby DB目录结构,但是当我重新启动JVM时,它不包含任何在旧JVM中存储的数据。

在此先感谢!

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

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

你可以找到更多关于Boot的支持数据库初始化in the docs的信息。

+0

你是我的英雄!这完全奏效。我一直在使用“创建 - 删除”。我改变它“更新”,一切正常。我想我应该阅读该领域的文档。非常感谢帮忙。附:对不起,我无法赞成你,因为我没有足够的代表。 – EvilJoe 2014-11-01 13:25:14

如果正在创建数据库目录,但数据不是持久的,则需要检查各种事物。

首先,你有没有提交你的交易?

要检查,在较低的水平,这是在指示德比做动作,如本文所述修改您的应用程序指定derby.language.logStatementText = true,则:http://db.apache.org/derby/docs/10.11/ref/rrefproper43517.html

然后检查你的derby.log在运行应用程序之后,查看您正在执行的Derby语句以及Derby正在执行的操作。