2011-10-10 61 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;关机=真正的”

希望这有助于。