Запуск и настройка базы данных с использованием Spring

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

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

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

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

Ответы

Ответ 2

С помощью H2 вы можете инициализировать базу данных в самом URL-адресе базы данных. Пример: у вас есть SQL script '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);
} $$;

Ответ 3

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

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

Ответ 4

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