我知道很多人会通过查看标题来解决这个问题但对我来说很重要。
我有一个要求,我们的Java应用程序应该知道如果DB中有任何表更改(我们使用mysql。)。我现在能想到的最好的是,我写一个触发器,如果表'x'被改变,那么我将一条记录插入表'Y'表示'X'表被改变。
现在,在我的java Web应用程序中,我正在考虑通过Quartz调度程序每分钟运行一个线程来检查表'y'中是否有任何新记录,这样我就可以发现表'X'被更改了
这是我需要建议的地方。 1)如何编写在特定表被更改时被触发的sql触发器? 2)我的老板告诉我,每分钟运行一个线程是一个需要考虑的昂贵操作。
除了运行线程以查找是否在DB中更改了表格之外,还有其他选择吗?
我真的需要找到解决这个问题的方法。感谢帮助。
更新:
我有两个网络应用程序说,WA1和WA2都和DBS共享同一个数据库。如果用户在WA2中执行操作,则DBS表会被更改(添加新列)。所以,我的WA1应该知道在WA2中执行了一个操作。我想到了上面提到的2点。有没有更好的方法呢?
任何人都可以给我一个mysql触发器,如果有一个表说mytbl被改变了会被执行吗?
我一直听说Java Stored Procedures and Triggers和UTL_HTTP.REQUEST,但它适用于Oracle。无论如何都要在MySQL中实现这个目标吗?
答案 0 :(得分:1)
我的简单解决方案:
只是我的两分钱的想法
答案 1 :(得分:0)
最简单的解决方案是让改变MySQL表的人运行Java应用程序。
假设您不能这样做,您可以阅读MySQL binary log以查看描述数据库更改的“事件”,例如表创建操作或表数据更改。你必须经常运行你的线程。也许每小时一次。
答案 2 :(得分:0)
嗯,我不确定你的要求和数据库设计,或者它是否适合你,但正如我认为在WA1中无论代码负责改变你的桌子,你自己都可以写一些代码来亲密你的WA2表示添加了哪些列以及添加了哪些表。如果两个应用程序都使用相同的技术,则可以生成一个简单的请求,以便wA2相应地运行,否则可以使用Web服务。
Edit:
DataBase用于持久性存储,不建议使用DataBase用于多个应用程序之间的通信。对于多个应用程序之间的通信,应该使用Web-Services / Rest。
答案 3 :(得分:0)
看看这个项目: Q4M
这是一个基于MySql的消息引擎 仍然处于早期阶段,但它应该足以满足您的要求。
答案 4 :(得分:0)
尝试查看JPA / Hibernate监听器。可能是一个好的开始。我做了一些谷歌搜索:https://code.google.com/p/simplejpa/wiki/EntityListeners,或者这里:http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/listeners.html