소스 검색

注册监控线程优化,降低死锁几率;

xuxueli 6 년 전
부모
커밋
90eba3827d

+ 1 - 0
doc/XXL-JOB官方文档.md 파일 보기

1518
 - 7、[ING]cron在线生成工具;
1518
 - 7、[ING]cron在线生成工具;
1519
 - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知;
1519
 - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知;
1520
 - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s;
1520
 - 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s;
1521
+- 10、注册监控线程优化,降低死锁几率;
1521
 
1522
 
1522
 
1523
 
1523
 ### TODO LIST
1524
 ### TODO LIST

+ 1 - 2
doc/db/tables_xxl_job.sql 파일 보기

71
   `registry_value` varchar(255) NOT NULL,
71
   `registry_value` varchar(255) NOT NULL,
72
   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
72
   `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
73
   PRIMARY KEY (`id`),
73
   PRIMARY KEY (`id`),
74
-  KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`),
75
-  KEY `i_u` (`update_time`)
74
+  KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
76
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
75
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
77
 
76
 
78
 CREATE TABLE `xxl_job_group` (
77
 CREATE TABLE `xxl_job_group` (

+ 4 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java 파일 보기

38
 						if (groupList!=null && !groupList.isEmpty()) {
38
 						if (groupList!=null && !groupList.isEmpty()) {
39
 
39
 
40
 							// remove dead address (admin/executor)
40
 							// remove dead address (admin/executor)
41
-							XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT);
41
+							List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT);
42
+							if (ids!=null && ids.size()>0) {
43
+								XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
44
+							}
42
 
45
 
43
 							// fresh online address (admin/executor)
46
 							// fresh online address (admin/executor)
44
 							HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
47
 							HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();

+ 3 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java 파일 보기

12
 @Mapper
12
 @Mapper
13
 public interface XxlJobRegistryDao {
13
 public interface XxlJobRegistryDao {
14
 
14
 
15
-    public int removeDead(@Param("timeout") int timeout);
15
+    public List<Integer> findDead(@Param("timeout") int timeout);
16
+
17
+    public int removeDead(@Param("ids") List<Integer> ids);
16
 
18
 
17
     public List<XxlJobRegistry> findAll(@Param("timeout") int timeout);
19
     public List<XxlJobRegistry> findAll(@Param("timeout") int timeout);
18
 
20
 

+ 10 - 1
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml 파일 보기

18
 		t.registry_value,
18
 		t.registry_value,
19
 		t.update_time
19
 		t.update_time
20
 	</sql>
20
 	</sql>
21
+
22
+	<select id="findDead" parameterType="java.lang.Integer" resultType="java.lang.Integer" >
23
+		SELECT t.id
24
+		FROM xxl_job_registry AS t
25
+		WHERE t.update_time <![CDATA[ < ]]> DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND)
26
+	</select>
21
 	
27
 	
22
 	<delete id="removeDead" parameterType="java.lang.Integer" >
28
 	<delete id="removeDead" parameterType="java.lang.Integer" >
23
 		DELETE FROM xxl_job_registry
29
 		DELETE FROM xxl_job_registry
24
-		WHERE update_time <![CDATA[ < ]]> DATE_ADD(NOW(),INTERVAL -#{timeout} SECOND)
30
+		WHERE id in
31
+		<foreach collection="ids" item="item" open="(" close=")" separator="," >
32
+			#{item}
33
+		</foreach>
25
 	</delete>
34
 	</delete>
26
 
35
 
27
 	<select id="findAll" parameterType="java.lang.Integer" resultMap="XxlJobRegistry">
36
 	<select id="findAll" parameterType="java.lang.Integer" resultMap="XxlJobRegistry">

+ 2 - 1
xxl-job-admin/src/test/java/com/xxl/job/admin/dao/XxlJobRegistryDaoTest.java 파일 보기

7
 import org.springframework.test.context.junit4.SpringRunner;
7
 import org.springframework.test.context.junit4.SpringRunner;
8
 
8
 
9
 import javax.annotation.Resource;
9
 import javax.annotation.Resource;
10
+import java.util.Arrays;
10
 import java.util.List;
11
 import java.util.List;
11
 
12
 
12
 @RunWith(SpringRunner.class)
13
 @RunWith(SpringRunner.class)
25
 
26
 
26
         List<XxlJobRegistry> list = xxlJobRegistryDao.findAll(1);
27
         List<XxlJobRegistry> list = xxlJobRegistryDao.findAll(1);
27
 
28
 
28
-        int ret2 = xxlJobRegistryDao.removeDead(1);
29
+        int ret2 = xxlJobRegistryDao.removeDead(Arrays.asList(1));
29
     }
30
     }
30
 
31
 
31
 }
32
 }