Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Jboss域模式下修复从部署应用程序到DB的重复插入?_Java_Mysql_Sql_Database_Jboss - Fatal编程技术网

Java 如何在Jboss域模式下修复从部署应用程序到DB的重复插入?

Java 如何在Jboss域模式下修复从部署应用程序到DB的重复插入?,java,mysql,sql,database,jboss,Java,Mysql,Sql,Database,Jboss,我使用默认设置在域模式下运行Jboss,并将war部署到主服务器组,默认情况下部署到两台服务器服务器一、服务器二。 我想将服务器端运行的应用程序中的数据插入到数据库中,但由于它在两台服务器中运行,我得到了对数据库的重复插入,我使用的是MySQL 由于两台服务器上的部署是同时进行的,因此我无法检查它是否已插入数据库中 是否有一个查询允许我在插入MySQL之前进行检查 或者我可以进入正在运行的服务器(服务器一或服务器二),仅当数据库正在运行服务器一时才插入数据库,但是我如何进入应用程序正在运行的服务

我使用默认设置在域模式下运行Jboss,并将war部署到
主服务器组
,默认情况下部署到两台服务器
服务器一、服务器二
。 我想将服务器端运行的应用程序中的数据插入到数据库中,但由于它在两台服务器中运行,我得到了对数据库的重复插入,我使用的是MySQL

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

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


或者我可以进入正在运行的服务器
(服务器一或服务器二)
,仅当数据库正在运行
服务器一时才插入数据库,但是我如何进入应用程序正在运行的服务器呢?

您可以通过执行单例服务触发HA单例插入。
下面是一个示例:

您可以通过实现单例服务触发HA单例的插入。
下面是一个示例:

插入一行,只有当它不存在时,才可以使用类似于以下内容的内容(可能需要对mySQL进行调整,我没有实例):

(工作-请注意,这是针对PostgreSQL运行的,因为mySQL窗口不允许插入代码)

如果要生成
语句,需要插入的行太多,请将它们粘贴到temp(断开连接时清除)表中,然后使用该引用而不是
引用


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

要插入一行,只有当它不存在时,你才可以使用类似于以下的东西(可能需要对mySQL进行调整,我没有实例):

(工作-请注意,这是针对PostgreSQL运行的,因为mySQL窗口不允许插入代码)

如果要生成
语句,需要插入的行太多,请将它们粘贴到temp(断开连接时清除)表中,然后使用该引用而不是
引用


不管怎样,我还是有点怀疑你想做什么…

从外部源加载?它是在初始化时加载还是什么?如果需要重新启动服务器,会发生什么情况?除此之外,
INSERT
s在我知道的每个RDBMS中允许
SELECT
s作为语句的一部分,这意味着它将“忽略”现有行…它正在验证它是否已经在数据库中,因此当服务器重新启动时,它不会再次插入它。是的,它在初始化时加载。为什么它在初始化时加载数据?那可能不是最好的时候。这些数据代表什么?为什么不能将它加载到数据库中一次(作为一个单独的命令),这样就不必担心“重复”;听起来应用程序和数据之间的耦合太紧密了。否则。。。什么能阻止您首先执行标准的
SELECT
语句?一个
INSERT-SELECT
查询可能是什么?因此,它仅在不存在时插入。它是这样一个简单的表:
CREATE table table(id int(10)NOT NULL AUTO_INCREMENT,name varchar(255)NOT NULL,PRIMARY KEY(id))
当它部署到外部源的加载时,它必须自动注册?它是在初始化时加载还是什么?如果需要重新启动服务器,会发生什么情况?除此之外,
INSERT
s在我知道的每个RDBMS中允许
SELECT
s作为语句的一部分,这意味着它将“忽略”现有行…它正在验证它是否已经在数据库中,因此当服务器重新启动时,它不会再次插入它。是的,它在初始化时加载。为什么它在初始化时加载数据?那可能不是最好的时候。这些数据代表什么?为什么不能将它加载到数据库中一次(作为一个单独的命令),这样就不必担心“重复”;听起来应用程序和数据之间的耦合太紧密了。否则。。。什么能阻止您首先执行标准的
SELECT
语句?一个
INSERT-SELECT
查询可能是什么?因此,它仅在不存在时插入。它是这样一个简单的表:
CREATE table table(id int(10)NOT NULL AUTO_INCREMENT,name varchar(255)NOT NULL,PRIMARY KEY(id))
当它部署到SQL Fiddle上时,它必须自动注册。在schema(左)面板中运行insert/updates/deletes,可能到新表或临时表中。然后,在右侧,您只需从中进行选择即可看到结果。这是MySQL的一个不幸的限制,但做这种事情可以解决大多数问题。@Jake-在这种情况下,我想在插入
之前显示表的“原始”状态,我不认为SQL Fiddle允许(独立)
选择左面板中的
语句……可以保持原始表不变,但是插入到一个新表中。然后,您可以在右侧面板中选择一个然后再选择另一个来查看结果。然后,在右侧,您只需从中进行选择即可看到结果。这是MySQL的一个不幸的限制,但做这种事情可以解决大多数问题。@Jake-在这种情况下,我想在插入
之前显示表的“原始”状态,我不认为SQL Fiddle允许(独立)
选择左面板中的
语句……可以保持原始表不变,但是插入到一个新表中。然后,您可以在右侧面板中选择一个,然后选择另一个来查看结果。
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))