Автоматическое обновление из базы данных во всех экземплярах

#java #spring

#java #весна

Вопрос:

В моем приложении java / spring запись базы данных извлекается при инициализации сервера и сохраняется как статическое поле. В настоящее время мы выполняем обновление mbean для обновления значений базы данных во всех экземплярах. Есть ли какой-либо другой способ программного обновления значения базы данных во всех экземплярах сервера? Я читаю об обновлении EntityManager.Будет ли это работать во всех экземплярах?Любая помощь будет принята с благодарностью.

Комментарии:

1. Просто для уточнения: у вас есть одна база данных и несколько экземпляров одного и того же приложения, подключенного к базе данных? Что является триггером для запуска перезагрузки? Обновляется ли оно периодически?

2. Привет, cmoetzing, это верно. одна база данных и много экземпляров. для перезагрузки текущая система использует команду загрузки mbean вручную. Я ищу варианты удаления mbean с помощью веб-команды отправить для перезагрузки или что-то в этом роде

3. это звучит как некоторый параметр конфигурации, который извлекается из базы данных и может быть изменен во время выполнения. в таком случае вы можете использовать cloud.spring.io/spring-cloud-static /.

4. Область обновления звучит очень интересно. работает ли это для нескольких экземпляров?

Ответ №1:

Например, вы можете запланировать перезагрузку каждые 5 минут.

Или вы можете отправлять события, и все экземпляры реагируют на это событие.

Комментарии:

1. Добавляю еще одно сообщение для просмотра . Это сообщение Oracle об использовании событий базы данных для аннулирования кэша

Ответ №2:

До сих пор связь между базами данных и серверами была односторонней, т.Е. Сервер приложений запрашивает данные из базы данных. Обычно это приводит к проблеме, и, как вы упомянули, все серверы приложений не могут знать об изменении базы данных, если приложение выполняется в режиме кластера.

Текущее решение включает в себя обновление полей время от времени (метод, основанный на опросе).
Чтобы сделать эту модель на основе push, мы можем создавать API-интерфейсы-оболочки поверх баз данных и позволять этим API-интерфейсам-оболочкам передавать изменения на все серверы приложений.

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

К счастью, если вы используете какую-то новую базу данных (например, MongoDB), они теперь предоставляют это обновление на серверы приложений из коробки.