Vecchia domanda ma ho trascorso molto tempo a capire come salvare un database H2 incorporato in un file e voglio condividere ciò che ho imparato.
Come detto @ebaxt, è possibile configurare la posizione del database incorporato all'interno della stringa di connessione. Se si desidera salvare l'uso del file system ~/
sintassi:
jdbc:h2:~/example/embeddedDb
Se si desidera salvare all'interno della vostra cartella del progetto è necessario utilizzare ./
sintassi
jdbc:h2:./example/embeddedDb
Questo creerà embeddedDb.mv.db
di file nella cartella example
all'interno della cartella principale o all'interno della cartella principale del progetto. Ma questo cancellerà il database ogni volta che si avvia l'applicazione. Per evitare questo ho usato la proprietà INIT
dire H2 per creare lo schema (coda nel mio caso) solo se non esiste:
INIT=create schema if not exists Queue;
Poi nello script DDL è necessario utilizzare creare la tabella se non esiste dichiarazione, per creare tutte le tabelle:
// create-db.sql
CREATE TABLE IF NOT EXISTS Queue (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
...
);
e dire H2 per eseguire lo script ogni volta che si ottiene il collegamento:
// if you want to store the script in the file system
runscript from '~/example/create-db.sql'
// if you want to store the script in the project folder
runscript from './example/create-db.sql'
Riassumendo questo è quello che devi fare per cre mangiato il database (EmbeddedDb) in modo annotazione:
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Bean
DataSource datasource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUsername("embedded");
dataSource.setPassword("embedded");
dataSource.setUrl("jdbc:h2:~/example/EmbeddedDb;INIT=create schema if not exists Queue\\; runscript from '~/example/create-db.sql'");
return dataSource;
}
o utilizzando XML:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:~/example/EmbeddedDb;INIT=create schema if not exists Queue\; runscript from '~/example/create-db.sql'" />
<property name="username" value="embedded" />
<property name="password" value="embedded" />
</bean>
Con questo metodo il database verrà creato solo se è la prima volta che si esegue l'applicazione o se il database il file non esiste. Altrimenti verrà caricata solo la connessione.
Si può anche monitorare lo stato del database con una bella interfaccia utilizzando la libreria hsqldb, aggiungendo la seguente fagiolo:
import org.h2.tools.Server;
import org.hsqldb.util.DatabaseManagerSwing;
@Bean(initMethod = "start", destroyMethod = "stop")
public Server startDBManager() throws SQLException {
DatabaseManagerSwing.main(new String[] { "--url", "jdbc:h2:~/example/EmbeddedDb", "--user", "embedded", "--password", "embedded" });
return Server.createWebServer();
}
Riferimenti:
http://www.mkyong.com/spring/spring-embedded-database-examples/
http://www.h2database.com/html/features.html#embedded_databases (Esegui SQL nella sezione Connect)
Potete fornire ulteriori informazioni su ciò che vorreste realizzare? Stai cercando di passare ad un altro database? –
Qual è l'URL del tuo database? –
Mi piacerebbe avere il mio H2 DB memorizzato su disco invece che in memoria (come ho fatto ora). – Pomario