【问题标题】:Can you place a listener on a db table or similar你能在数据库表或类似的表上放置一个监听器吗
【发布时间】:2015-04-21 13:30:00
【问题描述】:

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

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

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

【问题讨论】:

  • 第三者直接写入数据库?
  • 您使用的是哪个数据库?
  • 是的,这是他们的数据库。我们被允许从他们的视图中读取,并且只写入他们从中进行批处理的一些暂存表。他们使用 MS Sql Server 2012

标签: java spring listener


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以在视图上使用触发器,但这在 Java 领域无济于事,因为大多数 DB 不会让您在那里运行 Java 代码。您的选择是:1)像您一样轮询或 2)创建第三方调用的 Web 服务(或 JMS 队列或其他东西)以推送数据的更新/插入。然后你就在 java 领域,Hibernate/Spring 可以处理插入并做你需要的任何处理。

    【讨论】:

    • 我会接受这个答案,因为它基本上证实了我当前的实现。我希望那里有一些我不知道的东西。所以第三方有产品。他们不会专门为我们写东西,所以网络服务调用已经结束。尽管这是我们最初想要的。对于其他建议的触发器,我在数据库上也没有太多权利。我们只能查询他们的数据并写入某些表(用于暂存)。所以现在,我会坚持使用轮询器。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多