1

我正在使用 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 时,云上的数据库都会变空。

一些建议?

4

3 回答 3

2

@kenota 是正确的,但存在整个实例可能崩溃并重新构建的额外风险,因此您将丢失所有文件系统文件,即使在 /tmp 中也是如此。使用 MySQL 或 PostgreSQL 会好得多——两者在 CloudFoundry 中使用都很简单,而且性能会更好。此外,如果您有足够的流量需要多个 Web 服务器实例,您将共享一个数据库,而不是多个具有不同数据的基于文件的数据库。

于 2012-05-17T18:49:52.083 回答
1

通过做这个:

url = "jdbc:h2:file:prodDb"

您要求 H2 使用文件来存储数据。但问题是,您使用的是相对路径,因此该文件将创建在 web 应用程序的当前工作目录中,该目录通常是解压的 web 应用程序根目录。

如果您在 tomcat 上运行它,该文件将位于:/opt/tomcat7/webapps/app/prodDb 如果您将重新部署您的应用程序并删除以前的应用程序,那么数据库文件也将被删除。

我认为这正是 cloudfoundry 正在发生的事情。

您应该定义存储数据库的绝对路径:

url = "jdbc:h2:file:/tmp/prodDb"
于 2012-05-17T13:09:08.587 回答
1

我解决了在 cloudfoundy 上使用 MySQL 服务的问题。

于 2012-09-04T09:32:23.943 回答