2011-11-10 94 views
7

我写了一个Java应用程序,应该在数据库中发生“某事”时启动或唤醒它。例如,插入到用户表中应该触发发送通常的欢迎,密码......邮件。postgresql - java - 在数据库中发生某些事情时唤醒应用程序

这样做的最佳做法是什么?我可以写我的应用程序,使得它执行下面的查询让我们说每一秒钟:

select mail from user where mail_sent = false 

但是,这是投票了,我想,以避免它。有没有办法启动或唤醒我的Java应用程序(推送)由数据库中的更改发起?

干杯!

+0

重要信息:我只希望Java应用程序的一个单一实例。所以如果两个用户相继添加,我不想让第二个实例启动。也就是说,这些操作由单个实例按顺序处理。 –

回答

2

看看NOTIFY

+1

非常有用。根据http://jdbc.postgresql.org/documentation/83/listennotify.html,一个缺点似乎是我们仍然需要POLL:“JDBC驱动程序的一个关键限制是它无法接收异步通知,并且必须轮询后端检查是否发出任何通知。“这里的'后端'是什么意思?我们是每x秒查询一次数据库还是访问内存中的JDBC后端? –

+2

是的,后端表示数据库。是的,听众偶尔会查询数据库,看看是否收到通知。如果你想要实际的异步事件,你可以看看Firebird。 –

+1

根据pgsql的文档,它们是异步的。只有JDBC驱动程序具有不支持异步更新的限制。我想,这可能是他们路线图上的一项工作。 –

3

触发的PostgreSQL可以在主机的语言,除这是PL/Java编写。您可以在需要此监视的表上为相关操作(插入,删除,更新...)设置触发器并让触发器处理通知。它可能需要某种形式的进程间通信,但是如果触发器和客户端都是用Java编写的,那不应该太困难。

0

我不认为有可能启动一个应用程序。但是,当您运行应用程序时,该应用程序可以订阅以侦听事件。您可以使用触发器为某些操作发布(通知)事件。

当应用程序被通知事件时,它可以响应某些操作。请参阅postgresql site for an example

+0

在代码中的多个位置侦听多个事件时,帮助器实现非常有用。感谢那! –

相关问题