我正在构建一个小的Grails应用程序,我正在尝试使数据在开发环境中的服务器重新启动之间保持不变。
我将DataSource.groovy的相关部分更改为以下内容:
development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:hsqldb:mem:devDB"
}
}
每次重启服务器时,所有数据都消失了。我错过了另一种配置吗?
我在BootStrap.groovy中使用和不使用样本数据都尝试了它(如果这有任何区别)。
答案 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”
希望这有帮助。