1

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

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

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

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

4

2 回答 2

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 示例- 请注意这是针对 PostgreSQL 运行的,因为 mySQL 窗口不允许INSERT)。

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

无论如何,我还是有点怀疑你想要做什么......

于 2012-11-12T17:00:59.600 回答
0

您可以通过实现 Singleton 服务来使用 HA Singleton 触发插入。这是一个例子:http ://www.jboss.org/jdf/quickstarts/jboss-as-quickstart/cluster-ha-singleton/

于 2012-11-10T12:08:07.650 回答