2015-03-13 1 views
0

У меня есть требование, где мне нужно зафиксировать событие строки вставки в таблице в веб-приложении, чтобы уведомить пользователя о том, какая последняя запись была добавлена.Как захватить базу данных вставить событие строки в веб-приложение, построенное с использованием Spring Web mvc?

Сценарий

Приложение A1 хранит насосное записи в базу данных D1. Сетевое приложение W1 должно быть уведомлено о любых новых записях, внесенных в базу данных D1.

Веб-приложение разработано с использованием функции spring-web-mvc, JPA. Я рассмотрел возможность использования событий entitylistner, предоставляемых jpa и hibernate, но это ограничение, если одно и то же приложение выполняет операцию вставки, что не так.

Не могли бы вы, пожалуйста, помогите мне, как я могу это разрешить?

+0

Какая база данных? Say Postgres –

+0

В моем случае его MySql – pavan

ответ

2

В зависимости от ваших требований существует множество способов достижения желаемого.

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

1. Использование триггеров базы данных: вы можете добавить триггер к рассматриваемой таблице. Когда D1 вставляет запись в эту таблицу, используя триггер insert, вы можете добавить идентификатор записи в таблицу уведомлений. У вашего приложения W1 может быть запланированное задание, записывающее записи из уведомления. Предположим, он работает каждые 5 секунд и проверяет, есть ли там новые записи. Если это так, он считывает их обработку и затем удаляет их из уведомления.

2. Использование очередей: если записи могут быть вставлены в рассматриваемую таблицу через приложение D1, и поэтому приложение D1 является единственной точкой входа для записей в этой таблице, тогда вы используете очередь сообщений. Когда новая запись вставляется D1, вы отправляете сообщение со вставленными данными о записи в очередь сообщений. Приложение W1 является только подписчиком этой очереди. Как только записи поступят, W1 читает их из очереди и обрабатывает их.

3. Использование веб-службы:: еще раз, если записи могут быть вставлены только через D1, тогда W1 может выдать веб-службу, которая будет уведомляться при создании записей. Таким образом, когда D1 создает новую запись, она также может вызывать эту веб-службу и позволяет W1 знать, что новая запись была только что вставлена, чем W1 может действовать соответственно.

И, вероятно, существует много и много альтернатив.

+0

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

+0

@pavan Я бы рассмотрел триггер, говорящий прямо с веб-приложением, действительно плохую идею. С Spring [настройка задачи расписания] (http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#scheduling-annotation-support), вероятно, намного проще. –

+0

Я согласен с вами, но все же интересно узнать, действительно ли можно говорить напрямую с веб-приложением с триггера? – pavan