2014-10-31 93 views
2

我想使用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中存儲的數據。

在此先感謝!

回答

5

我假設你在使用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

1

如果正在創建數據庫目錄,但數據不是持久的,則需要檢查各種事物。

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

要檢查,在較低的水平,這是在指示德比做動作,如本文所述修改您的應用程序指定derby.language.logStatementText = true,則:http://db.apache.org/derby/docs/10.11/ref/rrefproper43517.html

然後檢查你的derby.log在運行應用程序之後,查看您正在執行的Derby語句以及Derby正在執行的操作。

相關問題