Вот мое требование:
Моя служба Java - это непрерывный процесс. При запуске службы java она загружает конфигурацию из одной из таблиц в базе данных MySql.
Когда есть какие-либо изменения (может быть insert/update/delete, также возможно вне java-сервиса), java-сервис должен немедленно перезагрузить конфигурацию.
Я видел Почта в stackoverflow, который предназначен для базы данных Oracle, но я ищу базу данных Mysql.
Я могу добиться этого, используя отдельный поток, который опрашивает таблицу базы данных с некоторым интервалом. Но голосование за изменения - не лучший способ. Вместо этого я ищу любой наблюдатель / слушатель, который будет уведомлять о любых изменениях в таблице MySql.
Может ли кто-нибудь помочь мне в этом?
Примечание. Если где-то уже есть ответ на этот вопрос, опубликуйте ссылку в комментарии, я удалю этот вопрос.
@instinct, Спасибо за ответ, но опять же надо с некоторым интервалом правильно опрашивать базу данных. Я пытаюсь этого избежать.
Рассматривали ли вы использование файла конфигурации или файла свойств (вместо таблицы базы данных)? Можно обнаружить изменение файла с помощью java.nio.file.WatchService.
Нет ничего, что работает из коробки, вы можете быть пересечены здесь в ответах: stackoverflow.com/questions/23031723/…
@prasad, по какой-то другой причине мы должны использовать mysql в качестве источника конфигурации. Я думал о файле как о конфигурации. В любом случае спасибо за комментарий.
Взгляните на mysql-уведомление.
Как насчет RowSetListener? Он может обнаруживать изменения в RowSet (например, JdbcRowset, который представляет собой подключенный набор строк). Слушатель добавлен в набор строк; и это немедленно обнаружит изменения в наборе строк в приложении (или службе). Но изменения, внесенные извне, по-прежнему нуждаются в каком-то механизме обновления набора строк в приложении (например, периодически выполнять запрос таблицы с использованием таймера).




Вы хотите создать систему отслеживания измененных данных. Возможно, вы могли бы использовать один, основанный на Кафке.
Вы можете использовать kafka-connect с Дебезиум на нем. Этот соединитель сначала делает снимок вашей таблицы, а затем читает binlog mysql, чтобы иметь возможность иметь согласованную тему kafka с вставкой / изменением / удалением в таблице.
Если вы не хотите его использовать, возможно, вы можете создать вилку кода, чтобы использовать то же самое, что и они, просто изменив вывод так, чтобы он был слушателем вашего приложения.
На самом деле нет необходимости делать вилки; при необходимости вы также можете использовать Debezium в качестве встроенная библиотека в своих Java-приложениях, позволяя при необходимости вручную обрабатывать сообщения об изменениях. (Отказ от ответственности: я руководитель проекта Debezium)
Эй, я не знал этой замечательной функции встраивания дебезиума. Действительно мило.
похоже, это может вам помочь. в конце концов, это оператор sql, который вернет набор результатов: serverfault.com/questions/112468/mysql-database-listener