Запуск и настройка БД в памяти с помощью Spring - PullRequest
15 голосов
/ 12 января 2011

Я пишу небольшое демонстрационное приложение на Java с использованием Spring, которое должно иметь доступ к базе данных.Он должен работать на разных машинах, и для создания реальной базы данных потребуется слишком много усилий.Поэтому я хочу использовать встроенный.

БД имеет заданную схему (две таблицы) и несколько (очень мало) предопределенных записей.Я ищу простой способ запустить базу данных в памяти, создать таблицы и заполнить данные.Все это должно происходить при инициализации контекста Spring.

Мой подход заключается в использовании H2 в качестве базы данных, а затем, возможно, Spring Batch для загрузки данных из csv- или xml-файлов.Однако я надеялся, что для этого может быть более простой способ.Существуют ли какие-либо базы данных / фреймворки / инструменты, которые могут сделать это из коробки?

Для настройки всего, что мне нужно, потребуется всего несколько SQL-команд.Я ищу способ сделать это в среде Spring максимально простым.

Ответы [ 4 ]

18 голосов
/ 12 января 2011

Spring имеет встроенную поддержку встроенной базы данных, см. поддержка встроенной базы данных. в документации.

5 голосов
/ 13 января 2011

С помощью H2 вы можете инициализировать базу данных в самом URL базы данных. Пример: у вас есть скрипт SQL 'start.sql', который содержит все скрипты для инициализации. Это может также включать создание таблиц из файла CSV. Затем используйте URL базы данных в форме jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'. Start.sql может выглядеть так (это пример, над которым я работаю в любом случае - он показывает, как создавать таблицы из файла 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);
} $$;
4 голосов
/ 12 января 2011

В Spring 3 добавлена ​​дополнительная поддержка встроенных баз данных, начиная с 3, с помощью элемента jdbc: embedded-database . Прочтите этот учебник для получения дополнительной информации.

Я бы также рекомендовал использовать Derby, так как он поставляется в комплекте с JDK 6.

1 голос
/ 12 января 2011

HSQLDB - хороший выбор.

...