你可以在数据库表或类似的表上放置一个监听器

时间:2015-04-21 13:30:01

标签: java spring listener

我有一个java后端系统。我们需要融入第三方。我需要将结果返回给客户端。目前我们正在使用第三方写入的视图(SQL SERVER)并在某处保留唯一ID的跟踪器。

我有一个Spring-wired poller,每10分钟运行一次,返回从上次发送到结束的所有内容,并使用新ID更新跟踪器表。没什么复杂的。

我想知道是否有一种简单的方法可以在桌子上“听”。如果添加了任何新行,请抓住它们并通过我的服务返回它们。如果有,是否可取?

3 个答案:

答案 0 :(得分:1)

免责声明:我还没有完全做到这一点,而SQL Server并不是我的游乐场。但是,现在应该可以将触发器与非SQL命令结合起来,并在互联网上搜索“sql server notification'产生一个关于SQL Server中查询通知的部分': https://msdn.microsoft.com/en-us/library/t9x04ed2(v=vs.110).aspx

通常,只要有可能以某种方式从触发器内部向套接字发送命令,那么您可以使用PUB-SUB消息队列(RabbitMQ,NSQ等)发送可以检索的通知你的Java程序。当然,您必须在要监视的任何列上安装触发器。是否可以监视模式(或数据库)的一般更改 - 只有在您有权访问的数据库中有一些日志记录时才可能这样做。这可能不存在,开箱即用。触发器可能更简洁,因为它驻留在架构/数据库本身,不需要访问系统表。

编辑:在触发器内发现了关于套接字连接的这个问题/答案:Creating socket inside a SQL-CLR trigger or stored procedure

答案 1 :(得分:0)

如果性能不是问题,您可以在表上使用触发器

答案 2 :(得分:0)

你可以在视图上使用触发器,但这在java版本中无济于事,因为大多数DB都不允许你在那里运行java代码。您的选择是:1)像您正在进行的轮询或2)创建第三方调用以推送数据更新/插入的Web服务(或JMS队列或其他内容)。然后你在java land中,Hibernate / Spring可以处理插入并执行你需要的任何处理。