当数据库表发生变化时,对JAVA Web应用程序的暗示

问题描述:

我知道很多人只是看着标题就可以解决这个问题,但这对我很重要。当数据库表发生变化时,对JAVA Web应用程序的暗示

我在那里我们的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但它是甲骨文。无论如何要在MySQL中实现这一点?

+0

使用而改变你的意思是表结构发生变化即新列添加。或者你的意思是新条目被添加到表 –

+0

通过改变,我的意思是,新列被添加。我不想考虑列是否被修改或删除。 – chaitanya89

+0

尝试mysql_proxy ... – Meherzad

最简单的解决办法是有谁改变MySQL表运行Java应用程序的人。

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

+0

谢谢你的答案,但在我的情况下,一个人不会手动更改表,但Web应用程序一样。请检查更新。 – chaitanya89

好了,我不知道你的要求和DB设计,或者这将是适合你的,但我觉得在WA1任何代码负责改变你的餐桌,还有本身就可以编写一些代码来亲密你的WA2添加了哪些列以及添加了哪些表。如果两个应用程序都使用相同的技术,则可以为wA2生成一个简单的请求以相应地执行操作,否则可以使用Web服务。

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

+0

这就是问题的所在,我们有不同的技术两个Web应用程序,因此我们做了DB作为这两个网络应用程序之间的通信手段。 – chaitanya89

+0

请参阅我的答案中的编辑。 –

看一看这个项目: Q4M

这是基于MySQL的 仍处于早期阶段,消息引擎,但它应该是足够好为你的质量要求。

我简单的解决方案:

  1. 实施那里每分钟石英调度工作。注意石英是一个有效的线程池,所以它取决于如何使它不是最便宜。
  2. 在作业,与任何机制可以让你比较中的列的差异相互核对的信息架构。希望保持这个以亚秒...

只是我的两思想美分

+0

+1这是目前我在做什么,但我需要比正在运行的线程/工作的每一分钟,所以我可以有可能提高性能的更好方法。我甚至不需要触发器。有没有比频繁运行线程更好的解决方案? – chaitanya89

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