java吧 关注:1,232,797贴子:12,697,573

有没有关于定时任务更好的方案?

只看楼主收藏回复

需要定时往另外一个系统同步数据,目前是查询出未同步的数据,然后循环同步,成功后回写成功标志,但是如果第二次任务执行的时候,第一次的数据没执行完,那么第二次就会查询出第一次还没同步过的数据,这样就会一条数据同步两次,有没有其他比较好的方案?


IP属地:陕西1楼2023-07-05 11:57回复


    IP属地:陕西2楼2023-07-05 12:15
    回复
      额 这是fixdelay跟fixrate的区别


      IP属地:广东来自手机贴吧4楼2023-07-05 13:09
      回复
        一次取一条,取到就更新状态,表示执行中,执行完了再更新成成功或者失败。


        IP属地:湖北来自Android客户端5楼2023-07-05 13:56
        收起回复
          加个锁。 或者隔离级别。


          IP属地:广东7楼2023-07-05 17:28
          收起回复
            感觉好像就是多个请求要操作同一条数据。加锁不行吗?或者把每次的间隔时间调长一些,或者每次检查的数据少一些?要不就insert on duplicate key update?


            IP属地:澳大利亚来自iPhone客户端8楼2023-07-05 17:42
            回复
              你想并发你就加锁,不并发的话间隔弄长一点。


              IP属地:江苏来自Android客户端9楼2023-07-05 17:52
              回复
                定时任务为啥不设置成 第一次执行完再执行第二次的。


                IP属地:浙江10楼2023-07-05 17:54
                回复
                  最简单的办法就是改下任务调度方式,从定时触发改为固定间隔,也就是说上一个任务结束后多久执行下一个。不管用的什么框架,应该都很容易。其次就是设置一个同步状态布尔值,如果一次还未结束,那么下一次触发就不执行。但数据同步,最好还是监听binlog或者说修改的append only log,一段时间后批量执行,对于原数据库的侵入最小,甚至可以很灵活的改为(准)实时。


                  IP属地:广东来自Android客户端11楼2023-07-06 09:59
                  收起回复
                    那就再标记呗,非3个标记阶段。,,


                    IP属地:安徽12楼2023-07-06 10:27
                    回复
                      怎么会有一条数据同步两次呢,数据不应该同步过后有个标识字段会打上1吗?你这次任务失败,同步了一半,下次连带着执行,不就从字段不是1的地方开始执行了


                      IP属地:河南来自Android客户端14楼2023-07-06 11:08
                      回复
                        我理解定时同步,不应该有一个ID字段唯一标识这个记录吗,这样的话不就能去重的吗


                        IP属地:北京来自Android客户端15楼2023-07-06 11:34
                        回复
                          第一次任务执行中,修改一个参数值为进行中,下次任务进来首先判断有没有其他线程在跑就行了


                          IP属地:陕西16楼2023-07-06 13:43
                          回复
                            实际不应该允许这样,如果真的这样的话得调整同步周期。你容忍整天都穿插执行?你数据多,把读来的数据全insert临时表,再批量update正式表,效率比一条条update高不少。


                            IP属地:广西来自Android客户端17楼2023-07-06 14:10
                            回复
                              首先为什么会出现第二次调用时第一次的数据还没同步完这个问题


                              IP属地:北京来自Android客户端18楼2023-07-06 14:35
                              回复