【问题标题】:Intimation to JAVA web application when a DB table is altered更改数据库表时对 JAVA Web 应用程序的提示
【发布时间】:2013-12-18 12:33:23
【问题描述】:

我知道很多人会通过看标题来解决这个问题,但这对我来说很重要。

我有一个要求,我们的 Java 应用程序应该知道 DB 中是否有任何表被更改(我们使用 mysql。)。我现在能想到的最好的办法是,我写了一个触发器,如果​​表“x”被更改,那么我在表“Y”中插入一条记录,说明表“X”被更改。

现在,在我的 Java Web 应用程序中,我正在考虑通过 Quartz 调度程序每分钟运行一个线程来检查表 'y' 中是否有任何新记录,这样我可以发现表 'X' 已更改.

这里是我需要建议的地方。 1)如何编写在特定表被更改时触发的sql触发器? 2) 我的老板告诉我,每分钟运行一个线程是一项需要考虑的昂贵操作。

除了运行线程来查找数据库中的表是否发生更改之外,还有其他选择吗?

我真的需要为这个问题找到任何解决方案。感谢您的帮助。

更新:

我有两个 Web 应用程序,WA1 和 WA2,它们共享同一个数据库,比如 DBS。如果用户在 WA2 中执行操作,则 DBS 表将被更改(添加新列)。所以,我的 WA1 应该知道在 WA2 中执行了一个操作。我想到了我上面提到的两点。有没有更好的方法来做到这一点?

如果有一个表说 mytbl 被更改,任何人都可以给我一个执行的 mysql 触发器吗?

我一直听说 Java Stored Procedures and Triggers 和 UTL_HTTP.REQUEST 但它是针对 Oracle 的。有没有办法在 MySQL 中实现这一点?

【问题讨论】:

  • Altered 是否意味着表结构已更改,即添加了新列。还是您的意思是新条目已添加到表中
  • 通过更改,我的意思是,添加了新列。我不想考虑列是否被修改或删除。

标签: java mysql sql quartz-scheduler


【解决方案1】:

我的简单解决方案:

  1. 实现每分钟运行一次的石英调度程序作业。请注意,quartz 是一个有效的线程池,因此取决于您如何让它变得不那么昂贵。
  2. 在作业中,使用允许您比较列中差异的任何机制交叉检查信息架构。希望将其保持在亚秒级...

只是我的两分钱的想法

【讨论】:

  • +1 这是我目前正在做的事情,但我需要一种比每分钟运行一个线程/作业更好的方法,这样我才能提高性能。我什至不需要触发器。有没有比频繁运行线程更好的解决方案?
【解决方案2】:

最简单的解决方案是让更改 MySQL 表的人运行 Java 应用程序。

假设您不能这样做,您可以阅读MySQL binary log 以查看描述数据库更改(例如表创建操作或表数据更改)的“事件”。您将不得不每隔一段时间运行一次线程。也许每小时一次。

【讨论】:

  • 感谢您的回答,但在我的情况下,一个人不会手动更改表格,但 Web 应用程序会这样做。请检查更新。
【解决方案3】:

好吧,我不确定您的要求和数据库设计,或者它是否适合您,但正如我认为在 WA1 中负责更改您的表的任何代码,您可以在其中编写一些代码来暗示您的WA2 添加了哪些列以及在哪个表中添加了这些列。如果两个应用程序使用相同的技术,则可以向 wA2 生成一个简单的请求以做出相应的行为,否则可以使用 Web 服务。

Edit:DataBase 用于持久存储,不推荐使用DataBase 用于多个应用程序之间的通信。对于多个应用程序之间的通信,应使用 Web-Services/Rest。

【讨论】:

  • 这就是问题所在,我们有两个采用不同技术的 Web 应用程序,因此我们将 DB 作为这两个 Web 应用程序之间的通信手段。
【解决方案4】:

看看这个项目: Q4M

这是一个基于MySql的消息引擎 仍处于早期阶段,但应该足以满足您的要求。

【讨论】:

    【解决方案5】:

    尝试查看 JPA/Hibernate 侦听器。可能是一个很好的起点。我做了一些谷歌搜索:https://code.google.com/p/simplejpa/wiki/EntityListeners,或者在这里:http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/listeners.html

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      相关资源
      最近更新 更多