如何使用Java创建数据库监听器?

15

大家好

我想做一个触发器或监听器(我不知道具体该用哪个),来监听特定的数据库表,每当有新的记录插入到该表中,就执行一些 Java 代码。我的意思是,如果可能的话,它能够检测到新记录的插入,并获取数据。

我需要了解如何完成这个过程的指导?

我正在使用 Spring-Hibernate-PostgreSQL。


经过阅读所有的评论和相关信息,我认为我要实现自己的解决方案。 我将继续使用JMS,因此当客户端通过JMS进行数据库更新时,我将向所有客户端发送JMS消息,告知数据已更改... 似乎这是唯一可靠的方法,因为触发器似乎很麻烦,轮询又是一个可怕的解决方案。 - JPM
3个回答

12

这就是 LISTEN/NOTIFY 的用途。

唯一的缺点是需要开启一个后台线程定期轮询数据库,以查看是否有可用的通知。

您也可以使用Postgres Wiki中的代码作为起点。


1
@AdamGent:确实是“自动”传输的,但只有在向服务器发送请求后才会自动传输。因此,只要客户端不发送请求,就不会收到任何通知。请求可以非常简单,例如select 42。请参阅JDBC手册中的示例:http://jdbc.postgresql.org/documentation/head/listennotify.html - user330315
如果数据库是Oracle,有办法做到吗? - Pawan Kumar
@PawanKumar:http://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28815 - user330315
轮询是一种可怕的解决方案,浪费 CPU 周期,你会认为现在有人会有更好的解决方案来监听数据库变化。 - JPM
@JPM:为什么不升级到Postgres呢? - user330315
显示剩余9条评论

1

1
你可以在Hibernate配置中添加一个拦截器来检测保存事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接