2012-05-17 43 views
1

我正在開發一個使用sts的grails 2.0.3應用程序。 我開發並在關閉sts之前,我通常會在cloudFoundry上部署我的應用程序。 我使用HSQLDB,這是DataSource.groovy的:爲每個cloudfoundry部署的grails應用程序丟失的DB數據應用程序

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分貝成爲在雲空。

有些建議?

+1

您沒有使用HSQLDB。你的URL應該是'jdbc:hsqldb:file:testDb; shutdown = true'等等來使用HSQLDB – fredt

回答

1

通過這樣做:

url = "jdbc:h2:file:prodDb" 

你問H2使用的文件來存儲數據。但問題是,您正在使用相對路徑,因此該文件將在Web應用程序的當前工作目錄中創建,該目錄通常是未打包的Web應用程序根目錄。

如果在tomcat上運行它,該文件將位於:/ opt/tomcat7/webapps/app/prodDb如果您將重新部署應用程序並刪除前一個,那麼數據庫文件也將被刪除。

我認爲這正是cloudfoundry正在發生的事情。

應該定義絕對路徑來存儲你的數據庫:

url = "jdbc:h2:file:/tmp/prodDb" 
2

@kenota是正確的,但有額外的風險,即整個實例可能會崩潰,並得到重建,所以你會失去所有的文件系統的文件,甚至in/tmp。使用MySQL或PostgreSQL會更好 - 這兩種方法在CloudFoundry中使用都很簡單,並且性能會更好。另外,如果您的流量足夠多,您需要多個Web服務器實例,則您將共享一個數據庫,而不是多個基於文件的數據庫,而這些數據庫都具有不同的數據。

+0

我試過url =「jdbc:h2:file:/tmp/qhDB」 但我有這個錯誤與舊的配置)SEVERE:錯誤listenerStart 2012年7月16日下午1時38分12秒org.apache.catalina.core.StandardContext開始SEVERE:上下文[]啓動失敗,由於以前的錯誤2012年7月16日,1:38:下午12點org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE:Web應用程序[]似乎已經啓動了一個名爲[Generate Seed]的線程,但未能阻止它。這很可能造成內存泄漏。停止Tomcat,因爲上下文停止。 我不能格式化我的評論... – Mcgyver83

+0

現在我想持久數據庫只存儲一些測試數據。一旦這個應用程序成爲一個真正的應用程序,我將轉向MySQL。 – Mcgyver83

1

我解決了在cloudfoundy上使用MySQL服務。

相關問題