如何在Jboss域模式下从部署应用程序修复重复插入数据库?

时间:2012-11-09 23:11:20

标签: java mysql sql database jboss

我在域模式下使用默认设置运行Jboss,并将战争部署到main-server-group,默认情况下部署到两个服务器server-one, server-two。 我想从服务器端运行的应用程序中插入数据库中的数据,但是当它在两个服务器中运行时,我得到了重复插入数据库,我正在使用MySQL。

由于两台服务器上的部署同时进行,因此我无法检查它是否已插入数据库中。

在插入MySQL之前是否有允许我检查的查询?

或许我可以进入正在运行的服务器(server-one or server-two)并仅在server-one中运行时插入数据库,但是如何进入应用程序运行的服务器?

2 个答案:

答案 0 :(得分:1)

只有INSERT行不存在时,你可以使用类似于以下内容的东西(可能需要针对mySQL进行调整,我没有实例):

INSERT INTO Registrar (name) (SELECT name
                              FROM (VALUES ('NEW'), ('EXISTING')) as tmp(name)
                              WHERE NOT EXISTS (SELECT '1'
                                                FROM Registrar
                                                WHERE Registrar.name = tmp.name))

(工作SQL Fiddle example - 请注意这是针对PostgreSQL运行的,因为mySQL窗口不允许INSERT)。

如果有太多行到INSERT生成VALUES语句,请将它们粘贴到临时(断开连接时清除)表,然后使用该引用而不是VALUES引用

无论如何,我仍然对你要做的事情有点怀疑......

答案 1 :(得分:0)

您可以通过实施Singleton服务来触发HA Singleton的插入。 以下是一个示例:http://www.jboss.org/jdf/quickstarts/jboss-as-quickstart/cluster-ha-singleton/