diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index d58558be..74afa447 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -1518,6 +1518,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 - 7、[ING]cron在线生成工具; - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知; - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s; +- 10、注册监控线程优化,降低死锁几率; ### TODO LIST diff --git a/doc/db/tables_xxl_job.sql b/doc/db/tables_xxl_job.sql index 1ee45886..1f84feb4 100644 --- a/doc/db/tables_xxl_job.sql +++ b/doc/db/tables_xxl_job.sql @@ -71,8 +71,7 @@ CREATE TABLE `xxl_job_registry` ( `registry_value` varchar(255) NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), - KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`), - KEY `i_u` (`update_time`) + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `xxl_job_group` ( diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java index 463db77c..6c838e04 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java @@ -38,7 +38,10 @@ public class JobRegistryMonitorHelper { if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT); + List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT); + if (ids!=null && ids.size()>0) { + XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids); + } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java index 66100a0c..779200b2 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java @@ -12,7 +12,9 @@ import java.util.List; @Mapper public interface XxlJobRegistryDao { - public int removeDead(@Param("timeout") int timeout); + public List findDead(@Param("timeout") int timeout); + + public int removeDead(@Param("ids") List ids); public List findAll(@Param("timeout") int timeout); diff --git a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml index 8865c00f..3a4f6b04 100644 --- a/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml +++ b/xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml @@ -18,10 +18,19 @@ t.registry_value, t.update_time + + DELETE FROM xxl_job_registry - WHERE update_time DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND) + WHERE id in + + #{item} +