Open LHaon opened 3 years ago
呃呃呃呃。。 什么版本,异常信息等都补充下呗。
呃呃呃呃。。 什么版本,异常信息等都补充下呗。
版本2.3.0 异常信息
trigger_day
, running_count
, suc_count
, fail_count
) VALUES ( ?, ?, ?, ? );; Duplicate entry '2021-03-05 00:00:00' for key 'i_trigger_day'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2021-03-05 00:00:00' for key 'i_trigger_day' at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:247) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:91)
若update操作没有更新内容时,返回的ret为0
没有更新内容,是成功数,执行中数量和失败数量都不变化吗?还是参数传null?
若update操作没有更新内容时,返回的ret为0
没有更新内容,是成功数,执行中数量和失败数量都不变化吗?还是参数传null?
就是成功数、失败数这些都没有变化时,会返回0.
如果不是第一次,这个时间每次都会变化。不会一直有返回0的问题哇。 你现在还有这个异常吗?还是只有调度中心启动的时候报这个错。
如果不是第一次,这个时间每次都会变化。不会一直有返回0的问题哇。 你现在还有这个异常吗?还是只有调度中心启动的时候报这个错。
调度中心启动之后,每隔一分钟会执行一次这个本地线程,更新最近三天任务执行的失败数、成功数等。 如上图,每次要更新的对象设置的时间是todayFrom。 todayFrom每次设置的时间都是当天的0时0分0秒 如今天就是 2021-03-05 00:00:00 先不说i值的变化 而如果表中已经有这一条数据,且该数据没有任何变化,则会返回0 接着执行if后面操作,便会SQL异常,此时退出循环,i值不会变化。 可以尝试将report表中的唯一索引为 2021-03-04 00:00:00 ,这行记录删除,启动调度中心, 不会新增唯一索引为 2021-03-04 00:00:00 的记录, 因为i=0更新唯一索引为2021-03-05 00:00:00 的记录时,返回0,导致SQL异常跳出循环。 此后的每一分钟进该线程,设置的时间还是2021-03-05 00:00:00,没变化的情况下更新操作还是会异常。
2021-03-04 00:00:00
为什么要删除这条唯一索引那,本来的判断逻辑,按照日期都会变化,每次都会更新成功。
2021-03-04 00:00:00
为什么要删除这条唯一索引那,本来的判断逻辑,按照日期都会变化,每次都会更新成功。
这个只是一种复现bug的方法。按照日期变化也是近三天的变化,拿今天来说,就一直扫描的是8日、7日、6日。当这个线程第二次执行的时候,唯一索引也是近三天。
2021-03-04 00:00:00
为什么要删除这条唯一索引那,本来的判断逻辑,按照日期都会变化,每次都会更新成功。
这个只是一种复现bug的方法。按照日期变化也是近三天的变化,拿今天来说,就一直扫描的是8日、7日、6日。当这个线程第二次执行的时候,唯一索引也是近三天。
这种复现方法,没办法说服xxl修改吧。。他不会认为这是个bug的吧
2021-03-04 00:00:00
为什么要删除这条唯一索引那,本来的判断逻辑,按照日期都会变化,每次都会更新成功。
这个只是一种复现bug的方法。按照日期变化也是近三天的变化,拿今天来说,就一直扫描的是8日、7日、6日。当这个线程第二次执行的时候,唯一索引也是近三天。
这种复现方法,没办法说服xxl修改吧。。他不会认为这是个bug。
不这样复现的话。本地启动admin也会一直报这个错,只要没有任务在跑。而且,扫描的是近三天,就算i=0的今天有任务在跑有更新,这个语句通过了,当i变成1或者2的时候有没有更新就不一定了(前两天的任务按理来说都没有更新了),没有更新的情况下也会出现这个问题。
我也是这个问题,请问解决了吗?
在83行 // do refresh时 若update操作没有更新内容时,返回的ret为0 执行if语句时,由于trigger_day是唯一索引,所以会导致插入失败。