2011-01-12 9 views
15

Sto scrivendo una piccola applicazione demo in Java utilizzando Spring, che deve avere accesso a un database. Dovrebbe essere eseguito su macchine diverse e sarebbe troppo difficile configurare un vero database. Quindi voglio usare uno incorporato.Avvio e impostazione del DB in memoria utilizzando Spring

Il DB ha uno schema dato (due tabelle) e alcune (molto poche) voci predefinite. Sto cercando un modo semplice per avviare un database in memoria, creare le tabelle e inserire i dati. Tutto ciò dovrebbe accadere durante l'inizializzazione del contesto di primavera.

Il mio approccio sarebbe utilizzare H2 come database e quindi forse Spring Batch per caricare i dati dai file csv o xml. Tuttavia speravo che potesse esserci un modo più semplice per raggiungere questo obiettivo. Esistono database/framework/strumenti che possono essere pronti per l'uso?

Ci vorranno solo pochi comandi SQL per configurare tutto ciò di cui ho bisogno. Sto cercando un modo per farlo in un ambiente di primavera il più semplice possibile.

risposta

18

Spring dispone di un supporto per il database incorporato incorporato, vedere embedded database support nella documentazione.

+0

+1 per questo suggerimento: non riesco a immaginare un modo che è più avido di questo. – Ralph

+0

Grazie per il suggerimento. Mi chiedo come mi sia mancato. Questo dovrebbe fare esattamente quello di cui ho bisogno. – martin

4

Spring 3 ha aggiunto ulteriore supporto per i database incorporati a partire da 3 con l'aiuto di jdbc: elemento del database incorporato. Read this tutorial per ulteriori informazioni.

Consiglio anche mediante Derby in quanto viene fornito con JDK 6.

5

Con H2, è possibile inizializzare il database nell'URL del database stesso. Esempio: hai uno script SQL 'start.sql' che contiene tutti gli script da inizializzare. Questo può anche includere la creazione di tabelle dal file CSV. Quindi utilizzare un URL del database del modulo jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'. Lo start.sql potrebbe apparire come questo (questo è un esempio su cui sto lavorando in ogni caso - si mostra come creare tabelle da un file CSV):

create table if not exists location(id int primary key, country varchar, 
region varchar, city varchar, postalCode varchar, latitude float, longitude float, 
metroCode varchar, areaCode varchar) 
as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Location.csv'); 

create table if not exists blocks(start long, end long primary key, location int) 
as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Blocks.csv'); 

create alias if not exists ip2id deterministic as $$ 
long ip2id(String s) { 
    String[] x = s.split("\\."); 
    return (Long.parseLong(x[0]) << 24) + (Long.parseLong(x[1]) << 16) + 
    (Long.parseLong(x[2]) << 8) + Long.parseLong(x[3]); 
} $$; 

create alias if not exists id2ip deterministic as $$ 
String id2ip(long x) { 
    return (x >> 24) + "." + ((x >> 16) & 255) + "." + 
     ((x >> 8) & 255) + "." + (x & 255); 
} $$;