2014-07-18 15 views
8

Ich erstelle eine Feder-basierte Web-Anwendung, die Embedded hsqldb verwendet. Meine Feder Config ist ziemlich einfach:Eingebettete HSQLDB persistent Daten in eine Datei

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

Aber mit dieser Konfiguration werden alle Daten im Speicher abgelegt. Hier ist die Datenquellen-URL, die erstellt wird

jdbc:hsqldb:mem:dataSource 

Ich muss Daten in einer Datei beibehalten. Damit ich es nach dem Serverneustart wieder benutzen kann.

+0

Wenn Sie es anhalten müssen, dann, warum Sie die 'mem' Modus verwenden Sie? –

+0

@a_horse_with_no_name Ich habe den Mem-Modus nicht angegeben. Ich nehme an, das ist die Standardkonfiguration, die vom Frühling erstellt wird. – user1745356

+0

'jdbc: embedded-database' in Spring bedeutet eine mem: database. Definieren Sie eine Datenbank mit Datei: in der URL. – fredt

Antwort

8

Diese Lösung für mich gearbeitet

<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

Mit anderen Worten, die Lösung für persistente Daten aus einer eingebetteten HSQLDB-Datenbank besteht nicht darin, eine eingebettete Datenbank zu verwenden. – Paul

+2

@Paul - Ich arbeite mit einer Spring MVC-Webanwendung, die eine speicherbasierte Persistenzschicht simuliert, die auf Map basiert. Offensichtlich ist eine Datenbank viel leistungsfähiger, also möchte ich HSQLDB verwenden. Ich möchte, dass die Datenbank eingebettet wird, d. H. Mit der Anwendung startet und stoppt, aber ich möchte, dass die Daten permanent sind, d. H. Dateibasiert. Gibt es einen Weg, dies zu erreichen? –

+2

@WebUser, mein früherer Kommentar war ein Fehler. Ich hätte sagen sollen, dass "die Lösung für persistente Daten aus einer In-Memory-Datenbank keine In-Memory-Datenbank ist". Die in der akzeptierten Antwort dargestellte Lösung sollte für Sie funktionieren - die Daten werden in einer Datei gespeichert und die Datenbank selbst ist eingebettet. – Paul

Verwandte Themen