监视来自不同应用程序的MySQL插入

Thy*_*hys 10 java mysql hibernate

我目前有一个web服务,它使用Hibernate在mysql数据库中插入信息.其中一些信息需要由另一个"导入"应用程序处理.我不想从Web服务触发此应用程序.因此,Web服务不依赖于Web服务,反之亦然.

有没有办法从"导入"应用程序"监听"数据库中的更改(特别是:插入),然后开始执行操作.我看过触发器,但这些似乎只适用于应用程序的Hibernate Session的更改,而不适用于"外部"更改.

编辑*

简而言之,我希望得到答案; 是否可以监视来自java应用程序的mysql数据库/表(来自任何源)的更改,该应用程序不会更改数据库/表本身

赏金更新*

我将奖励那些可以向我解释如何使用Java应用程序监视对MySQL表/数据库所做更改的人.监视更改的Java应用程序不是应用任何更改的应用程序.改变的来源可以是任何东西.

obm*_*arg 11

我认为你可以相当容易地实现这样的事情,假设你不介意在数据库上创建一些额外的表和触发器,并且监视java应用程序必须轮询数据库而不是专门接收触发器.

假设您要监视的表是这样的:

CREATE TABLE ToMonitor ( id INTEGER PRIMARY KEY, value TEXT );
Run Code Online (Sandbox Code Playgroud)

然后创建一个表来跟踪更改,并创建一个填充该表的触发器:

CREATE TABLE InsertedRecords( value TEXT );
CREATE TRIGGER trig AFTER INSERT ON account
FOR EACH ROW INSERT INTO InsertedRecords( value ) VALUES ( NEW.value );
Run Code Online (Sandbox Code Playgroud)

这将导致InsertedRecords表填充ToMonitor中发生的每个插入.

然后,您只需要定期设置监控应用程序SELECT * from InsertedRecords,采取适当的操作,然后清除记录InsertedRecords

编辑:一个轻微的替代方案,如果您不介意一些C/C++编码,将按照此处的说明创建一个自定义SQL函数,触发您的监视应用程序的操作,然后从内部调用该SQL函数你创建的触发器.

  • 请注意,当读取和清除记录时,应使用事务,以防止删除未被拒绝的行.您还可以简单地更新监控表中的last_insert_timestamp,以便"监听"查询可以简单地检查它们是否是最新的.最后你可以向MySQl devs询问一个功能(PostgreSQL有一个Listen/Notify命令) (2认同)

dbf*_*dbf 5

你可以阅读mysql二进制日志.在这里您可以找到一些信息.有一个java解析器另一个 - 但它被标记为未完成的)你也可以使用其他语言(例如,perl)查找类似的解析器,并用Java重写它们.
另外看看mysql-proxy.

  • 你可以使用以下内容[喜欢这个](http://stackoverflow.com/a/11486564/458741)制作喜欢的内容:`[喜欢这个](http://stackoverflow.com/a/11486564/458741) `它大大有助于提高代码的可读性. (2认同)