2011-01-12 4 views
15

Estoy escribiendo una pequeña aplicación de demostración en Java usando Spring, que necesita tener acceso a una base de datos. Debería ejecutarse en diferentes máquinas y sería demasiado esfuerzo configurar una base de datos real. Por lo tanto, quiero usar uno incrustado.Inicie y configure la base de datos en memoria usando Spring

La base de datos tiene un esquema dado (dos tablas) y algunas (muy pocas) entradas predefinidas. Estoy buscando una manera simple de iniciar una base de datos en memoria, crear las tablas y completar los datos. Todo esto debería ocurrir al inicializar el contexto de Spring.

Mi enfoque sería usar H2 como mi base de datos y luego quizás Spring Batch para cargar los datos de archivos csv o xml. Sin embargo, esperaba que pudiera haber una manera más fácil de lograr esto. ¿Hay bases de datos/marcos/herramientas que puedan hacer esto desde el primer momento?

Solo necesitaría unos pocos comandos SQL para configurar todo lo que necesito. Estoy buscando una forma de hacer esto en un entorno Spring lo más simple posible.

Respuesta

18

Spring tiene un soporte de base de datos incrustado incorporado, ver embedded database support en la documentación.

+0

+1 para esta pista: No me puedo imaginar una camino que es más difícil que esto. – Ralph

+0

Gracias por la sugerencia. Me pregunto cómo me lo perdí. Eso debería hacer exactamente lo que necesito. – martin

4

Spring 3 agregó más soporte para bases de datos incrustadas a partir de 3 con la ayuda de jdbc: embedded-database element. Read this tutorial para más información.

También me gustaría recomendar el uso de Derby, ya que viene con el JDK 6.

5

Con H2, podría inicializar la base de datos en la URL de la base de datos. Ejemplo: tiene un script SQL 'start.sql' que contiene todos los scripts para inicializar. Esto también puede incluir crear las tablas del archivo CSV. A continuación, utilice una URL de base de datos del formulario jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'. El start.sql podría tener este aspecto (esto es un ejemplo que estoy trabajando todos modos - que muestra cómo crear tablas a partir de un archivo 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); 
} $$; 
Cuestiones relacionadas