Запуск и настройка БД в памяти с помощью Spring

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

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

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

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

4 ответов


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


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

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

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


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