Запуск и настройка БД в памяти с помощью 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.