Как разделить базу данных H2 в памяти между несколькими загрузочными приложениями Spring? - PullRequest
2 голосов
/ 21 марта 2019

Это другой сценарий, чем другие ответы на вопросы.У меня есть одно загрузочное приложение Spring (приложение № 1), которое использует встроенную базу данных H2 в памяти и выставляет ее в качестве сервера.Мое второе загрузочное приложение Spring (приложение № 2) подключается к серверу H2 из приложения № 1, и это работает правильно.Я могу хранить и получать данные из H2.Теперь вот проблема.У меня третья загрузка Spring (приложение № 3), и она подключается к серверу H2 из приложения № 1.Соединение работает, но оно (проблема № 1) очищает все данные, которые ранее были сохранены приложением № 2.После этого теперь оба приложения # 2 и # 3 могут сохранять и извлекать свои данные, а также данные друг друга.Теперь я закрываю приложение №2 или №3, и (выпуск №2) оставшееся приложение не может продолжать использовать базу данных H2 в памяти.Являются ли проблемы № 1 и № 2 нормальным поведением?Если нет, как я могу их исправить?Я хочу, чтобы мои данные H2 оставались в течение всего времени, пока приложение № 1 (сервер H2) работает, даже если другие приложения были отключены, и я не хочу, чтобы мои данные очищались при подключении новых приложений к серверу H2.

1 Ответ

1 голос
/ 21 марта 2019

Нашел это в документации здесь: https://h2database.com/html/features.html

По умолчанию закрытие последнего соединения с базой данных закрывает базу данных.Для базы данных в памяти это означает, что содержимое потеряно.Чтобы оставить базу данных открытой, добавьте; DB_CLOSE_DELAY = -1 к URL базы данных.Чтобы сохранить содержимое базы данных в памяти, пока виртуальная машина жива, используйте jdbc: h2: mem: test; DB_CLOSE_DELAY = -1.

Так что я думаю, что ваша проблема может быть решенаесли вы просто установите строку db в файле application.properties для приложения №1:

spring.datasource.url=jdbc:h2:mem:mydb;DB_CLOSE_DELAY=-1

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

...