2015-03-13 19 views
0

我有一个需求,我需要在Web应用程序中的表中捕获插入行事件,以通知用户关于添加了最新记录的信息。如何将数据库插入行事件捕获到使用Spring web mvc构建的Web应用程序中?

方案

申请A1不断抽记录到数据库D1。网络应用程序W1应通知插入数据库的任何新记录D1

Web应用程序是使用spring-web-mvc,JPA持久性开发的。我研究了使用由jpa和hibernate提供的entitylistner事件的选项,但是这限制了如果同一个应用程序执行插入操作,情况并非如此。

难道你有人请帮助我,我怎么解决这个问题?

+0

哪个数据库?说Postgres – 2015-03-13 17:09:00

+0

在我的情况下它的MySql – pavan 2015-03-13 18:21:57

回答

2

根据您的要求,有很多方法可以实现您想要的。

由于您没有提供具体的要求,所以我只想谈谈如何实现它。

1.使用数据库触发器:您可以将一个触发器添加到有问题的表中。当D1向此表中插入记录时,可以使用插入触发器将记录的ID添加到通知表中。您的应用程序W1可能有一个计划任务从通知中读取记录。假设它每5秒运行一次并检查是否有新记录。如果是这样,它读取它们处理它们,然后从通知中删除它们。

2.使用队列:如果只能通过应用程序D1将记录插入问题表中,所以应用程序D1是此表中记录的唯一入口点,则使用消息队列。当D1插入新记录时,将带有插入记录详细信息的消息发送到消息队列。应用程序W1只是这个队列的一个用户。一旦记录到达,W1将从队列中读取它们并处理它们。

3.使用Web服务::如果记录只能通过D1插入,那么W1可能会暴露Web服务,以便在创建记录时通知Web服务。因此,当D1创建新记录时,它也可以调用此Web服务,并让W1知道插入了新记录,而W1可以相应地执行。

而且可能有很多更多的选择。

+0

谢谢你的确切答案,这是有帮助的。在我的研究中,我遇到了数据库触发器。你有什么想法,触发器是否可以直接调用Web应用程序?,我听说过触发器调用一个Java程序。采用这种方法,可以避免在服务器端编写调度器。 – pavan 2015-03-13 19:49:35

+0

@pavan我会考虑一个直接触发Web应用程序的触发器,这真是个坏主意。使用Spring [设置时间表任务](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#scheduling-annotation-support)可能要简单得多。 – 2015-03-13 21:07:34

+0

我同意你的看法,但仍然很想知道是否真的有可能从触发器直接与Web应用程序交谈? – pavan 2015-03-16 09:38:22

相关问题