【问题标题】:Java application subscribed to PostgreSQL/MySql订阅 PostgreSQL/MySql 的 Java 应用程序
【发布时间】:2012-05-13 14:09:19
【问题描述】:

我需要创建一个Java 代理,该代理可以在 Mysql 或 Psql 数据库中的特定表发生任何更新时立即感知并执行其指令。 一切都需要自动完成。

我想知道我是 Java 新手,你们可以给我任何建议..

我的选择是:

1) 在提交后有一个触发器可以唤醒我的 java 应用程序。 (使用 Pg_notify 等)

2) 或让 java 应用程序订阅数据库中的特定 ID(不确定是否可以这样做,因为异步更新是不可能的,我可能需要让我的代理向数据库询问 xx 秒以进行更改)

谢谢!

【问题讨论】:

  • 2 数据库是否具有相同的结构?使用 JDBC 还是?
  • Nope 结构可能有所不同..但这应该不是问题。我想即使每个数据库都需要一个应用程序,我也可以处理这个问题。我应该使用 JADE,但如果我必须使用 JDBC,那很好。
  • 我想建议的是,如果您使用 JDBC,那么您必须创建自己的库以使其更容易。您可以查看here 的快照。或者,也许您可​​以了解Hibernate + Spring 对您的问题非常有用。
  • 谢谢!准备好重新开始阅读和学习了。

标签: java mysql postgresql


【解决方案1】:

是的,使用 NOTIFY 的触发器是在 PostgreSQL 中执行此操作的好方法。使用 JDBC 驱动时的一个重要问题是无法异步接收通知,必须轮询。这通常很好,因为 NOTIFY/LISTEN 机制非常轻量级:如果您想每秒轮询 10(100?)次,那么您可以这样做而不会导致性能问题。请参阅http://jdbc.postgresql.org/documentation/83/listennotify.html 了解更多信息。

MySQL 不太有用;您需要将触发器 INSERT 行插入监控表并使用 SELECT *(然后 DELETE)重复轮询该表。这会奏效,但您更有可能最终在延迟/性能之间进行权衡。

【讨论】:

  • 我希望我可以绕过推送而不是从数据库中提取我需要的数据更改。这是我的主要目标..但在尝试后我认为触发想法是最好的选择。谢谢!
  • @user1373972:PostgreSQL 的“通知/监听”是非常轻量级的“拉”机制。不要害怕使用它。
  • 9.2 中将包含用于通知表更改的通用触发器;如果您不介意从源代码编译 C 代码,它适用于 9.0 和 9.1。 (我们已经在生产中使用它将近一年了。)postgresql.org/docs/devel/static/tcn.htmlgit.postgresql.org/gitweb/?p=postgresql.git;a=tree;f=contrib/… 完全披露:我写的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2014-10-22
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多