2011-10-10 62 views
6

我建立一個小Grails應用程序,而我試圖讓在開發環境中重新啓動服務器之間的數據仍然存在。Grails的不保留我的DB數據

我改變了DataSource.groovy中的下列相關部分:

development { 
    dataSource { 
     dbCreate = "update" // one of 'create', 'create-drop','update' 
     url = "jdbc:hsqldb:mem:devDB" 
    } 
} 

我每次重新啓動服務器,所有的數據都消失了。我錯過了另一個配置嗎?

我已經具有和不BootStrap.groovy中採樣數據嘗試(如果使任何差異)。

+0

...您正在使用哪個版本的Grails? – vector

+0

@vector謝謝,我刪除了'mem'關鍵字。現在都在工作。 – sim

+0

...所以我發佈的是一個答案,然後:-) – vector

回答

11

...嘗試下探的URL字符串的「MEM」部分:JDBC:HSQLDB:devDB現在你正在運行在內存模式下的數據庫,數據因此丟失。以嵌入模式運行數據庫應該能夠滿足您的需求。

+0

請注意,db-create update不會刪除數據。我已經創建並刪除mem後刪除數據,但意識到db-create更新與刪除mem聯合解決這個問題 – cyan

1

您使用的內存數據庫,所以沒有辦法在服務器重新啓動數據生存。切換到永久數據庫(MySQL和Postgres的,等等),然後設置dbCreate = 'validate'

例如,假設您選擇了MySQL作爲數據庫,你需要在DataSource.groovy更改設置:

development { 
    dataSource { 
     dbCreate = "validate" 

     // Put the MySQL JDBC JAR on the classpath of your Grails app 
     driverClassName = "com.mysql.jdbc.Driver" 

     // Change these property values as needed 
     url = "jdbc:mysql://localhost/yourDB" 
     username = "yourUser" 
     password = "yourPassword" 
    } 
} 
+0

...你的意思PostgreSql時說'正確',對吧? – vector

1

您的網址已配置爲使用內存數據庫。這就是你的url字符串中的「mem」指的。

我覺得更容易,尤其是瓦特/一個小項目使用BootStrap.groovy中的組合W/dbCreate的=「創建降」。

你可以改變你的網址指向一個文件或關係型數據庫,不過,如果你想堅持瓦特/出使用BootStrap.groovy中。我在內存數據庫中使用grails 2.0 w/an。

URL = 「的jdbc:H2:DB/devDb; auto_server =真正的」

下面是使用MySQL的一個例子(假設你有限於MySQL JDBC驅動程序):

URL =「的jdbc:mysql的://本地主機:8080 /富autoReconnect的=真正的」

一個例子瓦特/文件:

URL = 「的jdbc:HSQLDB:文件:PRODDB;關機=真正的」

希望這有助於。