2014-07-18 35 views
8

Sto creando un'applicazione Web basata sulla primavera che utilizza hsqldb incorporato. mio config primavera è piuttosto semplice:Dati persistenti HSQLDB incorporati in un file

<jdbc:embedded-database id="dataSource" type="HSQL" > 
    <jdbc:script location="classpath:scripts/create-table-if-not-exists" /> 
</jdbc:embedded-database> 

Ma con questa configurazione tutti i dati vengono memorizzati nella memoria. Qui è l'URL di origine di dati che viene creato

jdbc:hsqldb:mem:dataSource 

ho bisogno di persistere dati in un file. In modo che io possa usarlo di nuovo dopo il riavvio del server.

+0

Se è necessario persistere, allora perché si utilizza la modalità 'mem'? –

+0

@a_horse_with_no_name Non ho specificato la modalità mem. Presumo che questa sia la configurazione predefinita creata da Spring. – user1745356

+0

'jdbc: embedded-database' in Spring significa un mem: database. Definisci un database con il file: nell'URL. – fredt

risposta

8

Questa soluzione ha funzionato per me

<bean class="org.apache.commons.dbcp2.BasicDataSource" id="dataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:file:#{systemProperties['user.home']}/db/data" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 

<jdbc:initialize-database data-source="dataSource"> 
    <jdbc:script location="classpath:scripts/create-table-if-not-exists" /> 
</jdbc:initialize-database> 
+1

In altre parole, la soluzione per mantenere i dati da un database HSQLDB incorporato non consiste nell'utilizzare un database incorporato. – Paul

+2

@Paul - Sto lavorando con un'applicazione web MVC di Spring che simula un livello di persistenza in memoria basato su Mappa. Ovviamente, un database è molto più performante, quindi voglio usare HSQLDB. Voglio che il database sia incorporato, cioè avvio e interruzione con l'applicazione, ma voglio che i dati siano permanenti, cioè basati su file. C'è un modo per ottenere questo? –

+2

@WebUser, il mio commento precedente era in errore. Avrei dovuto dire che "la soluzione per mantenere i dati da un database in memoria non è usare un database in memoria". La soluzione presentata nella risposta accettata dovrebbe funzionare per voi: i dati sono archiviati in un file e il database stesso è incorporato. – Paul