2012-04-07 9 views
1

Ich kann meine eingebaute Datenbank nicht auf "update" setzen. Es ist immer gelöscht, wenn ich die App verlassen, als ob immer noch auf 'create-drop'.Grails - Die eingebaute Datenbank konnte nicht auf "update" gesetzt werden

Es kann nützlich sein zu wissen, dass ich eine MySQL-Datenbank verwendet habe, und zurück in die eingebaute Datenbank, um das Projekt mit Freunden teilen zu können, die nicht wissen, wie man eine SQL-Datenbank oder Tomcat einstellt Server.

Hier ist meine DataSource.groovy Datei:

dataSource { 
    pooled = true 
    driverClassName = "org.h2.Driver" 
    username = "sa" 
    password = "" 
} 
hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = true 
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 
} 
// environment specific settings 
environments { 
    development { 
     dataSource { 
      dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', '' 
      url = "jdbc:h2:mem:myAppDevDb;MVCC=TRUE" 
     } 
    } 
    test { 
     dataSource { 
      dbCreate = "update" 
      url = "jdbc:h2:mem:myAppTestDb;MVCC=TRUE" 
     } 
    } 
    production { 
     dataSource { 
      dbCreate = "update" 
      url = "jdbc:h2:myAppProdDb;MVCC=TRUE" 
      pooled = true 
      properties { 
       maxActive = -1 
       minEvictableIdleTimeMillis=1800000 
       timeBetweenEvictionRunsMillis=1800000 
       numTestsPerEvictionRun=3 
       testOnBorrow=true 
       testWhileIdle=true 
       testOnReturn=true 
       validationQuery="SELECT 1" 
      } 
     } 
    } 
} 

Jede Hilfe sehr geschätzt. Vielen Dank im Voraus.

Antwort

4

Das Problem besteht darin, dass Ihre Datenquelle als eine im Speicher befindliche Datenquelle konfiguriert ist, so dass sie beim Beenden von jvm verworfen wird. Wenn Sie Ihre H2-URL so konfigurieren, dass sie stattdessen eine Datei verwendet, sollten Sie in der Lage sein, die Datenbank zu speichern.

development { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:h2:somefile:myAppDevDb;MVCC=TRUE" 
    } 
} 
+2

Ja. Bitte beachten Sie, dass mit dieser URL die Datei 'somefile' im aktuellen Arbeitsverzeichnis erstellt wird, in dem die Anwendung läuft. Es könnte sicherer sein, einen absoluten Pfad zu verwenden, zum Beispiel 'jdbc: h2:/data/db/somefile: myAppDevDb; MVCC = TRUE' oder relativ zum aktuellen Home-Verzeichnis des Benutzers:' jdbc: h2: ~/somefile: myAppDevDb; MVCC = TRUE' –

+0

Vielen Dank. Es verhält sich wie erwartet. –

Verwandte Themen