postgresql - java - 当数据库中发生某些事情时唤醒应用程序
Posted
技术标签:
【中文标题】postgresql - java - 当数据库中发生某些事情时唤醒应用程序【英文标题】:postgresql - java - wake up application when something in database happens 【发布时间】:2011-11-10 10:52:15 【问题描述】:我编写了一个 Java 应用程序,当数据库中发生“某些事情”时应该启动或唤醒它。例如,插入用户表应该触发通常的欢迎邮件、密码、...邮件的发送。
执行此操作的最佳常见做法是什么?我可以编写我的应用程序,使其每秒执行以下查询:
select mail from user where mail_sent = false
但这是轮询,我想避免它。有没有办法启动或唤醒由数据库更改启动的 Java 应用程序(推送)?
干杯!
【问题讨论】:
重要信息:我只想要一个 Java 应用程序实例。因此,如果两个用户一个接一个地添加,我不想启动第二个实例。也就是说,动作由单个实例顺序处理。 【参考方案1】:PostgreSQL 中的触发器可以用多种语言编写,其中包括 PL/Java。您可以在需要监视相关操作(插入、删除、更新...)的表上设置触发器,并让触发器处理通知。它可能需要某种形式的进程间通信,但如果触发器和客户端都是用 Java 编写的,那应该不会太难。
【讨论】:
【参考方案2】:看看NOTIFY
【讨论】:
非常有用。一个缺点似乎是我们仍然必须根据jdbc.postgresql.org/documentation/83/listennotify.html 进行 POLL:“JDBC 驱动程序的一个关键限制是它无法接收异步通知,并且必须轮询后端以检查是否发出了任何通知。” 这里的意思是 '后端'?我们是每 x 秒查询一次数据库还是访问内存中的 JDBC 后端? 是的,后端是指数据库。是的,监听器偶尔会轮询数据库以查看它是否收到通知。如果您想要实际的异步事件,可以查看 Firebird。 根据 pgsql 的文档,它们是异步的。只有 JDBC 驱动有不支持异步更新的限制。我猜这可能是他们路线图上的一个 TO DO。【参考方案3】:试试这个..它很容易理解,对你有很大帮助
https://wiki.postgresql.org/wiki/PgNotificationPoller
【讨论】:
【参考方案4】:我认为无法启动应用程序。但是,当您运行应用程序时,该应用程序可以订阅以侦听事件。您可以使用触发器发布(通知)特定操作的事件。
当应用程序收到事件通知时,它可以响应某些操作。请参阅postgresql site for an example。
【讨论】:
在代码中多个位置监听多个事件时,帮助器实现非常有用。谢谢!以上是关于postgresql - java - 当数据库中发生某些事情时唤醒应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 7 的应用程序安装程序中捆绑 PostgreSQL