Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
7b052d73
提交
7b052d73
authored
7月 14, 2017
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调度中心任务注册检测逻辑优化;
上级
1c556b89
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
69 行增加
和
81 行删除
+69
-81
JobGroupController.java
...java/com/xxl/job/admin/controller/JobGroupController.java
+0
-18
XxlJobGroup.java
...c/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
+11
-8
JobRegistryMonitorHelper.java
...m/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
+36
-28
XxlJobTrigger.java
...in/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+3
-14
IXxlJobGroupDao.java
.../src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java
+2
-0
XxlJobGroupDaoImpl.java
...n/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java
+5
-0
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+4
-12
XxlJobGroupMapper.xml
...n/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
+8
-1
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
浏览文件 @
7b052d73
package
com
.
xxl
.
job
.
admin
.
controller
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.thread.JobRegistryMonitorHelper
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
...
...
@@ -14,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.annotation.Resource
;
import
java.util.Arrays
;
import
java.util.List
;
/**
...
...
@@ -36,20 +32,6 @@ public class JobGroupController {
// job group (executor)
List
<
XxlJobGroup
>
list
=
xxlJobGroupDao
.
findAll
();
if
(
CollectionUtils
.
isNotEmpty
(
list
))
{
for
(
XxlJobGroup
group:
list
)
{
List
<
String
>
registryList
=
null
;
if
(
group
.
getAddressType
()
==
0
)
{
registryList
=
JobRegistryMonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
}
}
group
.
setRegistryList
(
registryList
);
}
}
model
.
addAttribute
(
"list"
,
list
);
return
"jobgroup/jobgroup.index"
;
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
浏览文件 @
7b052d73
package
com
.
xxl
.
job
.
admin
.
core
.
model
;
import
org.apache.commons.lang.StringUtils
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
/**
...
...
@@ -16,6 +20,12 @@ public class XxlJobGroup {
// registry list
private
List
<
String
>
registryList
;
// 执行器地址列表(系统注册)
public
List
<
String
>
getRegistryList
()
{
if
(
StringUtils
.
isNotBlank
(
addressList
))
{
registryList
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
addressList
.
split
(
","
)));
}
return
registryList
;
}
public
int
getId
()
{
return
id
;
...
...
@@ -49,14 +59,6 @@ public class XxlJobGroup {
this
.
order
=
order
;
}
public
List
<
String
>
getRegistryList
()
{
return
registryList
;
}
public
void
setRegistryList
(
List
<
String
>
registryList
)
{
this
.
registryList
=
registryList
;
}
public
int
getAddressType
()
{
return
addressType
;
}
...
...
@@ -72,4 +74,5 @@ public class XxlJobGroup {
public
void
setAddressList
(
String
addressList
)
{
this
.
addressList
=
addressList
;
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
浏览文件 @
7b052d73
package
com
.
xxl
.
job
.
admin
.
core
.
thread
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.TimeUnit
;
/**
...
...
@@ -23,8 +26,6 @@ public class JobRegistryMonitorHelper {
return
instance
;
}
private
ConcurrentHashMap
<
String
,
List
<
String
>>
registMap
=
new
ConcurrentHashMap
<
String
,
List
<
String
>>();
private
Thread
registryThread
;
private
boolean
toStop
=
false
;
public
void
start
(){
...
...
@@ -33,26 +34,42 @@ public class JobRegistryMonitorHelper {
public
void
run
()
{
while
(!
toStop
)
{
try
{
// remove dead admin/executor
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
removeDead
(
RegistryConfig
.
DEAD_TIMEOUT
);
// auto registry group
List
<
XxlJobGroup
>
groupList
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
findByAddressType
(
0
);
if
(
CollectionUtils
.
isNotEmpty
(
groupList
))
{
// fresh registry map
ConcurrentHashMap
<
String
,
List
<
String
>>
temp
=
new
ConcurrentHashMap
<
String
,
List
<
String
>>();
List
<
XxlJobRegistry
>
list
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
findAll
(
RegistryConfig
.
DEAD_TIMEOUT
);
if
(
list
!=
null
)
{
for
(
XxlJobRegistry
item:
list
)
{
String
groupKey
=
makeGroupKey
(
item
.
getRegistryGroup
(),
item
.
getRegistryKey
());
List
<
String
>
registryList
=
temp
.
get
(
groupKey
);
if
(
registryList
==
null
)
{
registryList
=
new
ArrayList
<
String
>();
}
if
(!
registryList
.
contains
(
item
.
getRegistryValue
()))
{
registryList
.
add
(
item
.
getRegistryValue
());
// remove dead address (admin/executor)
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
removeDead
(
RegistryConfig
.
DEAD_TIMEOUT
);
// fresh online address (admin/executor)
HashMap
<
String
,
List
<
String
>>
appAddressMap
=
new
HashMap
<
String
,
List
<
String
>>();
List
<
XxlJobRegistry
>
list
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
findAll
(
RegistryConfig
.
DEAD_TIMEOUT
);
if
(
list
!=
null
)
{
for
(
XxlJobRegistry
item:
list
)
{
if
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
().
equals
(
item
.
getRegistryGroup
()))
{
String
appName
=
item
.
getRegistryKey
();
List
<
String
>
registryList
=
appAddressMap
.
get
(
appName
);
if
(
registryList
==
null
)
{
registryList
=
new
ArrayList
<
String
>();
}
if
(!
registryList
.
contains
(
item
.
getRegistryValue
()))
{
registryList
.
add
(
item
.
getRegistryValue
());
}
appAddressMap
.
put
(
appName
,
registryList
);
}
}
temp
.
put
(
groupKey
,
registryList
);
}
// fresh group address
for
(
XxlJobGroup
group:
groupList
)
{
List
<
String
>
registryList
=
appAddressMap
.
get
(
group
.
getAppName
());
String
addressListStr
=
StringUtils
.
join
(
registryList
,
","
);
group
.
setAddressList
(
addressListStr
);
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
update
(
group
);
}
}
registMap
=
temp
;
}
catch
(
Exception
e
)
{
logger
.
error
(
"job registry instance error:{}"
,
e
);
}
...
...
@@ -73,13 +90,4 @@ public class JobRegistryMonitorHelper {
//registryThread.interrupt();
}
private
static
String
makeGroupKey
(
String
registryGroup
,
String
registryKey
){
return
registryGroup
.
concat
(
"_"
).
concat
(
registryKey
);
}
public
static
List
<
String
>
discover
(
String
registryGroup
,
String
registryKey
){
String
groupKey
=
makeGroupKey
(
registryGroup
,
registryKey
);
return
instance
.
registMap
.
get
(
groupKey
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
浏览文件 @
7b052d73
...
...
@@ -7,18 +7,14 @@ import com.xxl.job.admin.core.model.XxlJobLog;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.thread.JobFailMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobRegistryMonitorHelper
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Date
;
/**
...
...
@@ -90,17 +86,10 @@ public class XxlJobTrigger {
StringBuffer
triggerSb
=
new
StringBuffer
();
// exerutor address list
ArrayList
<
String
>
addressList
=
null
;
XxlJobGroup
group
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
load
(
jobInfo
.
getJobGroup
());
if
(
group
.
getAddressType
()
==
0
)
{
triggerSb
.
append
(
"注册方式:自动注册"
);
addressList
=
(
ArrayList
<
String
>)
JobRegistryMonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
triggerSb
.
append
(
"注册方式:手动录入"
);
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
addressList
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
)));
}
}
triggerSb
.
append
(
(
group
.
getAddressType
()
==
0
)?
"注册方式:自动注册"
:
"注册方式:手动录入"
);
ArrayList
<
String
>
addressList
=
(
ArrayList
<
String
>)
group
.
getRegistryList
();
triggerSb
.
append
(
"<br>阻塞处理策略:"
).
append
(
ExecutorBlockStrategyEnum
.
match
(
jobInfo
.
getExecutorBlockStrategy
(),
ExecutorBlockStrategyEnum
.
SERIAL_EXECUTION
).
getTitle
());
triggerSb
.
append
(
"<br>失败处理策略:"
).
append
(
ExecutorFailStrategyEnum
.
match
(
jobInfo
.
getExecutorBlockStrategy
(),
ExecutorFailStrategyEnum
.
FAIL_ALARM
).
getTitle
());
triggerSb
.
append
(
"<br>地址列表:"
).
append
(
addressList
!=
null
?
addressList
.
toString
():
""
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobGroupDao.java
浏览文件 @
7b052d73
...
...
@@ -11,6 +11,8 @@ public interface IXxlJobGroupDao {
public
List
<
XxlJobGroup
>
findAll
();
public
List
<
XxlJobGroup
>
findByAddressType
(
int
addressType
);
public
int
save
(
XxlJobGroup
xxlJobGroup
);
public
int
update
(
XxlJobGroup
xxlJobGroup
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobGroupDaoImpl.java
浏览文件 @
7b052d73
...
...
@@ -22,6 +22,11 @@ public class XxlJobGroupDaoImpl implements IXxlJobGroupDao {
return
sqlSessionTemplate
.
selectList
(
"XxlJobGroupMapper.findAll"
);
}
@Override
public
List
<
XxlJobGroup
>
findByAddressType
(
int
addressType
)
{
return
sqlSessionTemplate
.
selectList
(
"XxlJobGroupMapper.findByAddressType"
,
addressType
);
}
@Override
public
int
save
(
XxlJobGroup
xxlJobGroup
)
{
return
sqlSessionTemplate
.
update
(
"XxlJobGroupMapper.save"
,
xxlJobGroup
);
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
7b052d73
...
...
@@ -5,7 +5,6 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.thread.JobRegistryMonitorHelper
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
...
...
@@ -13,7 +12,6 @@ import com.xxl.job.admin.dao.IXxlJobLogGlueDao;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
com.xxl.job.core.glue.GlueTypeEnum
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -288,21 +286,15 @@ public class XxlJobServiceImpl implements IXxlJobService {
// executor count
Set
<
String
>
executerAddressSet
=
new
HashSet
<
String
>();
List
<
XxlJobGroup
>
groupList
=
xxlJobGroupDao
.
findAll
();
if
(
CollectionUtils
.
isNotEmpty
(
groupList
))
{
for
(
XxlJobGroup
group:
groupList
)
{
List
<
String
>
registryList
=
null
;
if
(
group
.
getAddressType
()
==
0
)
{
registryList
=
JobRegistryMonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
}
}
if
(
CollectionUtils
.
isNotEmpty
(
registryList
))
{
executerAddressSet
.
addAll
(
registryList
);
if
(
CollectionUtils
.
isNotEmpty
(
group
.
getRegistryList
()))
{
executerAddressSet
.
addAll
(
group
.
getRegistryList
());
}
}
}
int
executorCount
=
executerAddressSet
.
size
();
Map
<
String
,
Object
>
dashboardMap
=
new
HashMap
<
String
,
Object
>();
...
...
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
浏览文件 @
7b052d73
...
...
@@ -21,12 +21,19 @@
t.address_list
</sql>
<select
id=
"findAll"
parameterType=
"java.lang.Integer"
resultMap=
"XxlJobGroup"
>
<select
id=
"findAll"
resultMap=
"XxlJobGroup"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t
ORDER BY t.order ASC
</select>
<select
id=
"findByAddressType"
parameterType=
"java.lang.Integer"
resultMap=
"XxlJobGroup"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t
WHERE t.address_type = #{addressType}
ORDER BY t.order ASC
</select>
<insert
id=
"save"
parameterType=
"com.xxl.job.admin.core.model.XxlJobGroup"
>
INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `app_name`, `title`, `order`, `address_type`, `address_list`)
values ( #{appName}, #{title}, #{order}, #{addressType}, #{addressList});
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论