我正在使用sts开发grails 2.0.3应用程序。 我开发并且在关闭sts之前我通常在cloudFoundry上部署我的应用程序。 我正在使用HSQLDB,这是DataSource.groovy:
dataSource {
pooled = true
driverClassName = "org.h2.Driver"
username = "mcg"
password = "mcg"
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
development {
dataSource {
dbCreate = "update" // one of 'create', 'create-drop','update'
url = "jdbc:h2:file:qhDB"
}
}
test {
dataSource {
dbCreate = "update"
url = "jdbc:h2:file:testDb"
}
}
production {
dataSource {
dbCreate = "update"
url = "jdbc:h2:file:prodDb"
}
}
}
我的问题是,每次将我的应用程序部署到cloudfoundry时,数据库在云端都会变空。
一些建议?
答案 0 :(得分:2)
@kenota是正确的,但是存在整个实例崩溃并重建的额外风险,因此即使在/ tmp中也会丢失所有文件系统文件。使用MySQL或PostgreSQL要好得多 - 两者在CloudFoundry中都很容易使用,而且性能会更好。此外,如果您有足够的流量需要多个Web服务器实例,您将共享一个数据库而不是多个基于文件的数据库,这些数据库都具有不同的数据。
答案 1 :(得分:1)
通过这样做:
url = "jdbc:h2:file:prodDb"
您要求H2使用文件存储数据。但问题是,您正在使用相对路径,因此该文件将在Web应用程序的当前工作目录中创建,该目录通常是解压缩的Web应用程序根目录。
如果您在tomcat上运行它,该文件将位于:/ opt / tomcat7 / webapps / app / prodDb如果您将重新部署应用程序并删除之前的应用程序,则数据库文件也将被删除。
我认为这正是cloudfoundry上发生的事情。
您应该定义存储数据库的绝对路径:
url = "jdbc:h2:file:/tmp/prodDb"
答案 2 :(得分:1)
我解决了在cloudfoundy上使用MySQL服务的问题。