2 shi0299 shi0299 于 2013.07.04 21:39 提问

java以webservice形式向发送远程数据,发送时出现重复数据,如何解决?

我是用java从本地数据库中(oracle)提取数据后,封装,发送给远程服务器,然后远程服务器会返回发送结果代码。
我在主表中的每条数据都有一个字段显示其发送次数,还有一个字段显示发送结果。再有一张结果表,专门存储每条数据每次发送的结果和错误原因等详细信息。两张表是一对多关系。主表对每条数据是唯一的,当发送完,次数字段会增加1,发送结果也会更新 最新一次数据发送的结果。平时数据量小的时候完全没有问题,比如:第一次发送成功后,服务器返回1,代表发送成功。如果再发,服务器那边会校验已经发送过这条数据,就会返回2,代表数据以存在,况且我发送前有校验,当前数据如果在主表中结果字段里是1的,就不再发送。
我的程序是通过计划任务运行批处理自动执行的,平时都没问题。但有时候,似乎是当数据量大的时候,会出现一条数据同时重复发送了两次。查询主表和结果表后显示:主表发送次数字段为2,结果字段为1(成功),也就是这条数据在同一时间重复发送了两次,第二次是成功发送的。再查询结果表后,也发现有两条信息,每次的返回结果都为1,这两次的发送时间是一模一样的,例如都是05:02:13 (五时2分13秒),也就是两次都成功发送了。
按理说跑着一个程序,不该另外出现一个一模一样的进程重复一起运行和发送啊,但数据确实是重复发送出去了,服务器那边也收到了两条一模一样的数据,因为发送频率是同一时刻,所以那边校验都没起上作用,有用的话第二次肯定返回结果代码2。我觉得是不是缓存问题呢?又或者是同步什么的,我发送的那个方法一直是synchronization来修饰了的。求解决办法。不甚感激啊。

1个回答

weiwuwen
weiwuwen   2016.05.09 22:52

遇到类似的问题,请问楼主后面解决了吗?如果解决了是怎么解决的?

shi0299
shi0299 你挖坟了
大约 2 年之前 回复
shi0299
shi0299 解决了,不过我这里是由于相同的计划任务线程重复导致的。例如在第一次10:00执行的任务,到10:05再次执行时,刚刚那个任务还没执行完成,所以又开启了一个线程,并由于相同任务所用的队列相同,所以两个线程处理任务时发生了交集,造成数据库主键都不管用了,产生了N多ID相同的数据,服务器那边也就接收了重复数据。。。我这里解决是在第二次执行任务前先判断之前那个任务是否已经执行完,如果没有,就放弃执行。
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
WebService学习记录----客户端数据发送
引言: 近期由于公司需要,开始接触WebService Java端的接口制作。在服务端的创建与客户端的连接方面出现了很多问题,本文先就客户端出现的问题进行一些说明。 刚开始做客户端的时候考虑对面使用的是CXF框架(ABAP语言),那么我也在本地使用了cxf框架并使用其方法对他们的接口进行了调用,因为对方设置了web访问权限导致我 每次连接都是报的401错误 ,那么我开始考虑有没有
客户端以XML格式向服务器端发送数据
客户端以XML格式向服务器端发送数据,详细要求如下: 1)客户端读取UserList.xml中的数据,将其发送到服务器端。 2)服务器接收到XML格式的数据后,将其输出到User_Server.xml文件中。
SEMQ消息重复处理问题
如何保证一个消息在目标接收方只被成功处理一次。 如一张订单不应该被接收方处理两次,即不能认为对方下了2个订单,出现这种问题在交易系统如银行系统中是严重的。 如果存在唯一的订单号码,则应用层可以避免,在接收到订单后,检查是否有该订单的历史处理记录来避免。 对于简单的接收保存操作,则可以通过数据库的唯一性约束进行控制。 如果数据库没有约束,或者不由应用层来判别而由传输层保证,这样,传输机制
Java 以post请求方式通过json格式调用Webservice接口
打算用post请求发送json参数调用discuz的清除缓存的功能,但是discuz不允许使用post请求,不想改太多discuz的代码,最后只能用get请求发送,虽然没用到,还是总结下,以后会用到: Java发送post请求: ? 1 2 3 4 5 6 7 8 9 10 11
十八、发送xml数据给服务器
一、发送xml数据 public static void main(String[] args) throws Exception { String xml = "中国"; String path = http://localhost:8083/videoweb/video/manage.do?method=getXML ; b
PHP如何向.NET接口webservice发送xml请求
<br />首先,我明白PHP可以使用soapclient 生成实例 调用.NET中暴露的接口方法。<br />PHP向.NET的webservice发送请求,.NET中接口方法的参数是分别写的,PHP中需要将参数当做一个数组。但如果.NET中某个参数是xml字符串,在PHP中怎么写才能正确发送请求呢?<br />请教一下上述代码用PHP实现应该如何写,最关键的就是最后一个参数xml,PHP传参数时必写入数组,但是xml作为数组元素<br />帮我写一段wml代码,通过输入框输入内容补全一个网址,我的发帖记
java程序或javaweb(网站)向手机发送短信
JAVA发送手机短信,大体有以下几种方法: (1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice接口进行发送,但是需要进行注册; (2)使用短信猫的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备短信猫; (3)使用中国网建提供的SMS短信平台,这里实现的demo也是基于这个接口是发送的;(需要注册) (4)采用中国移动的飞信接
通过webservice提交xml数据以及soap协议的使用
上次已经给大家分享了简单的webservice的使用,提交给服务器的数据只是简单类型的数据,这次呢换成了xml,并通过一个小例子来讲解soap协议的使用。废话就不多说了先来说下xml数据的上传 1.代码的结构没有多大的变化,只需修改一下请求头就可以了,代码如下 //封装数据,数据以byte方式传输 byte[] b=xml.getBytes(); //需要请求的连接 URL
远程桌面如何向远程的计算机发送ctrl+alt+del
网络上有人说:对远程桌面连接进行设置,将组合健反映给远端机器。 可是windows2003自带的远程桌面里没有相应的选项,只得下了个远程桌面连接再试。 设置方法:如果你的主控端是XP或2K系统,运行远程桌面连接时,展开“选项”,在“本地资源”标签的中间部分应用windows组合键,选择“远程计算机上”就可能啦。 可最终也没有把ctrl+alt+del组合键发送到远程计算机端,但其它的组合键可
Android:网络:发送xml数据和调用webservice
public void testSendXML() throws Exception{         InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("person.xml");         byte[] data = StreamTool.read(inStream);