Grails没有保留我的数据库数据

时间:2011-10-10 12:48:14

标签: grails

我正在构建一个小的Grails应用程序,我正在尝试使数据在开发环境中的服务器重新启动之间保持不变。

我将DataSource.groovy的相关部分更改为以下内容:

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

每次重启服务器时,所有数据都消失了。我错过了另一种配置吗?

我在BootStrap.groovy中使用和不使用样本数据都尝试了它(如果这有任何区别)。

3 个答案:

答案 0 :(得分:13)

...尝试删除url字符串的'mem'部分:jdbc:hsqldb:devDB现在你正在以内存模式运行db,因此丢失了数据。在嵌入式模式下运行数据库应该可以满足需要。

答案 1 :(得分: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"
    }
}

答案 2 :(得分:1)

您的网址配置为使用内存数据库。这就是你的网址字符串中的“mem”所指的内容。

我发现它更容易,尤其是w / dbCreate =“create-drop”组合使用BootStrap.groovy的小项目。

但是,如果要使用BootStrap.groovy保持w / out,可以将网址更改为指向文件或关系数据库。我在内存db中使用grails 2.0 w /。

url =“jdbc:h2:db / devDb; auto_server = true”

以下是使用mySql的示例(假设您有可用于mysql的jdbc驱动程序):

url =“jdbc:mysql:// localhost:8080 / foo?autoreconnect = true”

w / file的示例:

url =“jdbc:hsqldb:file:prodDb; shutdown = true”

希望这有帮助。