2014-10-31 2 views
2

Я хотел бы использовать функцию репозитория Spring-boot для подключения к базе данных Derby на основе каталогов. После долгих боев я понял, что дерби DB, с которой я продолжаю подключаться, - это только база данных в памяти. Есть ли способ указать, что база данных должна храниться в файловой системе вместо памяти? Я хочу, чтобы моя база данных была сохранена (и доступна для доступа) после того, как моя JVM будет убита.Spring Boot База данных на основе каталога

Я попытался указать на соединение URL Derby использовать базу данных каталога на основе, используя следующую недвижимость в application.properties:

spring.datasource.url=jdbc:derby:directory;create=true 

Моя собственность получал читать и использовать, но база данных до сих пор не сделал сохраняйте данные между стартапами JVM и остановами. Кажется, что структура каталога Derby DB создается в местоположении, указанном моим системным свойством «derby.system.home», но когда я перезапустил свою JVM, он не содержал никаких данных, хранящихся в старой JVM.

Заранее благодарен!

ответ

5

Предполагаю, что вы используете Hibernate. Если это так, важна конфигурация spring.jpa.hibernate.ddl-auto. Когда вы используете встроенную базу данных, такую ​​как Derby, Boot по умолчанию это значение create-drop. Падающая часть этого будет приводить к тому, что Hibernate будет удалять все таблицы базы данных при выключении вашего приложения.

Вы должны изменить эту конфигурацию, чтобы она соответствовала вашим потребностям. Например, с использованием none и создания схемы с использованием файла schema.sql.

Дополнительную информацию о поддержке Boot для инициализации базы данных in the docs.

+0

Ты мой герой! Это полностью сработало. Я всегда использовал «create-drop». Я изменил его на «обновление», и все сработало. Наверное, я должен был прочитать документацию по этому полю. Большое спасибо за помощь. Постскриптум Извините, я не могу выдвинуть вас, потому что мне не хватает репутации. – EvilJoe

1

Если каталог базы данных создается, но ваши данные не сохраняются, есть множество вещей для проверки.

Во-первых, вы ОБЯЗИЛИ свою транзакцию?

Чтобы проверить, на более низком уровне, действия, которые вы инструктирование Derby сделать, изменить приложение, чтобы указать derby.language.logStatementText = истинное, как описано здесь: http://db.apache.org/derby/docs/10.11/ref/rrefproper43517.html

Затем осмотрите свой derby.log после запуска приложения, чтобы посмотреть, какие заявления вы выполняете в Derby, и что Derby делает с ними.

Смежные вопросы