2011-10-10 17 views
6

Sto costruendo una piccola applicazione Grails e sto cercando di rendere i dati persistenti tra i riavvii del server nell'ambiente di sviluppo.Grail che non conserva i dati del mio DB

ho cambiato la parte rilevante del DataSource.groovy al seguente:

development { 
    dataSource { 
     dbCreate = "update" // one of 'create', 'create-drop','update' 
     url = "jdbc:hsqldb:mem:devDB" 
    } 
} 

Ogni volta che riavviare il server, tutti i dati è scomparso. Mi manca un'altra configurazione?

Ho provato con e senza dati di esempio in BootStrap.groovy (se questo fa alcuna differenza).

+0

... quale versione di Grails stai usando? – vector

+0

@vector Grazie, ho rimosso la parola chiave 'mem'. Tutto funziona ora. – sim

+0

... così ho postato è come una risposta quindi :-) – vector

risposta

11

... prova a rilasciare la parte "mem" della stringa dell'URL: jdbc: hsqldb: devDB In questo momento stai eseguendo il db in modalità memoria, quindi la perdita di dati. L'esecuzione del db in modalità incorporata dovrebbe fare ciò di cui hai bisogno.

+0

nota che db-create update non cancella i dati. Avevo creato e dopo aver rimosso mem stavo cancellando i dati, ma mi sono reso conto che db-crea l'aggiornamento insieme alla rimozione di mem, risolve questo problema – cyan

1

Si sta utilizzando un database in memoria, quindi non c'è modo per i dati di sopravvivere attraverso i riavvii del server. Passare a un database persistente (MySQL, Postgres, ecc), quindi impostare dbCreate = 'validate'

Per esempio, supponendo che si è scelto di MySQL come database è necessario modificare le impostazioni in DataSource.groovy a:

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" 
    } 
} 
+0

... intendevi PostgreSql quando dicevi "corretto", giusto? – vector

1

Il tuo url è configurato per utilizzare un database in memoria. Questo è ciò che fa riferimento a "mem" nella stringa dell'URL.

Trovo più facile, specialmente con un piccolo progetto di utilizzare BootStrap.groovy in combinazione w/dbCreate = "create-drop".

È possibile modificare l'URL in modo che faccia riferimento a un file o database relazionale, tuttavia, se si desidera eseguire la persistenza senza utilizzare BootStrap.groovy. Sto usando Grails 2.0 w/an in memoria db.

url = "jdbc: h2: db/devDb; auto_server = true"

Ecco un esempio utilizzando MySQL (supponendo che si dispone di un driver JDBC per MySQL disponibili):

url = "jdbc: mysql : // localhost: 8080/foo autoriconnessione = true"

Un esempio w/file:

url = "jdbc: HSQLDB: file:? prodDb; arresto = true"

Spero che questo aiuti.

Problemi correlati