postgresql-java-数据库中发生事件时唤醒应用程序

postgresql-java-数据库中发生事件时唤醒应用程序,java,postgresql,triggers,push-notification,Java,Postgresql,Triggers,Push Notification,我已经编写了一个Java应用程序,当数据库中发生“某些事情”时,应该启动或唤醒它。例如,用户表中的插入应该触发通常的欢迎、密码等的发送。。。邮件 这样做的最佳常见做法是什么?我可以编写应用程序,使其每秒执行以下查询: select mail from user where mail_sent = false 但这是投票,我想避免。有没有办法启动或唤醒由数据库中的更改启动的Java应用程序(push) 干杯 看一看PostgreSQL中的触发器可以用多种语言编写,其中包括PL/Java。您可以在

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

这样做的最佳常见做法是什么?我可以编写应用程序,使其每秒执行以下查询:

select mail from user where mail_sent = false
但这是投票,我想避免。有没有办法启动或唤醒由数据库中的更改启动的Java应用程序(push)


干杯

看一看

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

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


当应用程序收到事件通知时,它可以通过某些操作进行响应。请参阅。

试试这个。它很容易理解,并且会给你很大帮助


重要信息:我只想要一个Java应用程序实例。因此,如果两个用户一个接一个地添加,我不希望启动第二个实例。也就是说,操作是由单个实例按顺序处理的。非常有用。一个缺点似乎是,我们仍然必须根据“JDBC驱动程序的一个关键限制是它不能接收异步通知,必须轮询后端以检查是否发出了任何通知。”这里的“后端”是什么意思?我们是每x秒查询一次数据库还是访问内存中的JDBC后端?是的,后端指的是数据库。是的,监听器偶尔会轮询数据库,看看它是否收到通知。如果你想要实际的异步事件,你可以看看Firebird。根据pgsql的文档,它们是异步的。只有JDBC驱动程序具有不支持异步更新的限制。我想这可能是他们路线图上的一个重要步骤。当在代码中的多个位置侦听多个事件时,助手实现非常有用。谢谢你!