2011-01-12 15 views
15

Piszę małą aplikację demo w Javie przy użyciu Spring, która musi mieć dostęp do bazy danych. Powinien działać na różnych komputerach i byłoby zbyt dużo wysiłku, aby skonfigurować prawdziwą bazę danych. Dlatego chcę użyć osadzonego.Uruchamianie i konfigurowanie DB w pamięci przy użyciu Spring

DB ma podany schemat (dwie tabele) i kilka (bardzo mało) wstępnie zdefiniowanych pozycji. Szukam prostego sposobu na uruchomienie bazy danych w pamięci, utworzenie tabel i wypełnienie danych. Wszystko to powinno się zdarzyć podczas inicjowania kontekstu Wiosny.

Moje podejście polegałoby na wykorzystaniu H2 jako mojej bazy danych, a następnie może Spring Batch do załadowania danych z plików CSV lub XML. Miałem jednak nadzieję, że może być łatwiejszy sposób osiągnięcia tego. Czy istnieją bazy danych/frameworki/narzędzia, które mogą to zrobić zaraz po wyjęciu z pudełka?

Wymagałoby to tylko kilku poleceń SQL do skonfigurowania wszystkiego, czego potrzebuję. Szukam sposobu, aby zrobić to w środowisku wiosennym tak prostym, jak to tylko możliwe.

Odpowiedz

18

Spring ma wbudowaną obsługę wbudowanych baz danych, patrz embedded database support w dokumentacji.

+0

+1 dla tego wskazówka: Nie mogę wyobrazić sobie droga, która jest bardziej niż ta. – Ralph

+0

Dzięki za cynk. Zastanawiam się, jak to przegapiłem. To powinno zrobić dokładnie to, czego potrzebuję. – martin

4

Spring 3 dodał więcej wsparcia dla wbudowanych baz danych począwszy od 3 z pomocą elementu jdbc: embedded-database. Read this tutorial, aby uzyskać więcej informacji.

bym też zalecamy użycie Derby jak to jest w zestawie z JDK 6.

5

Za pomocą H2 można zainicjować bazę danych w samym adresie URL bazy danych. Przykład: masz skrypt SQL "start.sql", który zawiera wszystkie skrypty do zainicjowania. Może to również obejmować tworzenie tabel z pliku CSV. Następnie użyj adresu URL bazy danych o formularzu jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'. Start.sql mógłby wyglądać następująco (jest to przykład pracuję nad każdym razie - to pokazuje, jak tworzyć tabele z pliku 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); 
} $$; 
Powiązane problemy