1

项目(仅用于上下文)

我目前正在开发一个预订解决方案,客户可以通过将事件拖到日历中(也可以移动、编辑、删除)来从 web 应用程序预订资源,就像时尚的谷歌日历一样。我的 web 应用程序的持久层将预订存储在 postgres 9.3 上的表中,并带有开始和结束(timestamp with timezone因为用户/客户将位于不同的时区)。这部分工作正常。webapp 在 Debian 上运行并与 Play 一起使用!如果这很重要,请用 scala 编写。

问题

现在我要解决的问题是,在预订的开始时间需要运行一个程序来配置客户端对资源的访问(以及在停止时间以及禁用访问)。此外,它还需要以某种方式传递参数或至少获知启动的原因(以明确此时是否预订了多个资源)。如果这很重要,配置程序将用 java 或 scala 编写,并将在与数据库不同的机器上运行。

编辑:它不需要 GUI 或任何它只需要运行的东西。

我已经读过的

我读了一些关于LISTENNOTIFY不确定我将如何使用它来启动我的程序的东西。我对数据库的整个主题非常陌生。这甚至是正确的方法吗?

tl;博士

我尝试在存储在 postgres 数据库中的时间上运行程序,但不知道如何。

4

1 回答 1

2

您需要一个外部 cron 作业或其他定期任务调度程序来查询表并决定是否需要运行某些东西。如果你在 Java/Scala 中,你可以用一个在空闲期间休眠的简单线程来做到这一点。或任何计时框架播放!包括内部 - 这看起来像Play 中的异步作业!1.2;如果您使用它,2.x 中会有类似的东西。这个答案可能会帮助你:https ://stackoverflow.com/a/16982421/398670

您可以让程序短时间休眠,然后轮询 PostgreSQL 连接上的新通知,并在收到通知时重新检查计划。当数据库中的调度表发生更改时,让触发器发送一个 NOTIFY,以便轮询客户端知道更新其副本。

轮询程序可以修改其睡眠间隔,使其睡眠直到事件应该发生的确切时间,此时它启动指定的命令。

当 NOTIFY 进入时,PgJDBC 不提供回调,因此您无法休眠,直到下一个事件或被回调唤醒。你必须做短暂的睡眠,然后醒来使用轮询通知PGConnection.getNotifications()

于 2013-11-06T08:23:51.060 回答