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 你挖坟了
一年多之前 回复
shi0299
shi0299 解决了,不过我这里是由于相同的计划任务线程重复导致的。例如在第一次10:00执行的任务,到10:05再次执行时,刚刚那个任务还没执行完成,所以又开启了一个线程,并由于相同任务所用的队列相同,所以两个线程处理任务时发生了交集,造成数据库主键都不管用了,产生了N多ID相同的数据,服务器那边也就接收了重复数据。。。我这里解决是在第二次执行任务前先判断之前那个任务是否已经执行完,如果没有,就放弃执行。
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!