Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
熊鹏飞
/
xxljob220
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
293ffca1
authored
Jun 20, 2019
by
xuxueli
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
调度组件销毁流程优化,先停止调度线程,然后等待时间轮内存量任务处理完成,最终销毁时间轮线程;
parent
998da25c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
57 additions
and
17 deletions
doc/XXL-JOB官方文档.md
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
doc/XXL-JOB官方文档.md
View file @
293ffca1
## 《分
布式任务调度平台XXL-JOB》
## 《分
布式任务调度平台XXL-JOB》
...
...
@@ -1477,6 +1477,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
11、升级xxl-rpc至较新版本,修复代理服务初始化时远程服务不可用导致长连冗余创建的问题;
-
12、首页调度报表的日期排序在TIDB下乱序问题修复;
-
13、调度中心与执行器双向通讯超时时间调整为3s;
-
14、调度组件销毁流程优化,先停止调度线程,然后等待时间轮内存量任务处理完成,最终销毁时间轮线程;
### 6.26 版本 v2.1.1 Release Notes[规划中]
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
View file @
293ffca1
...
...
@@ -27,7 +27,8 @@ public class JobScheduleHelper {
private
Thread
scheduleThread
;
private
Thread
ringThread
;
private
volatile
boolean
toStop
=
false
;
private
volatile
boolean
scheduleThreadToStop
=
false
;
private
volatile
boolean
ringThreadToStop
=
false
;
private
volatile
static
Map
<
Integer
,
List
<
Integer
>>
ringData
=
new
ConcurrentHashMap
<>();
public
void
start
(){
...
...
@@ -40,13 +41,13 @@ public class JobScheduleHelper {
try
{
TimeUnit
.
MILLISECONDS
.
sleep
(
5000
-
System
.
currentTimeMillis
()%
1000
);
}
catch
(
InterruptedException
e
)
{
if
(!
t
oStop
)
{
if
(!
scheduleThreadT
oStop
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
logger
.
info
(
">>>>>>>>> init xxl-job admin scheduler success."
);
while
(!
t
oStop
)
{
while
(!
scheduleThreadT
oStop
)
{
// 扫描任务
long
start
=
System
.
currentTimeMillis
();
...
...
@@ -127,7 +128,7 @@ public class JobScheduleHelper {
conn
.
commit
();
}
catch
(
Exception
e
)
{
if
(!
t
oStop
)
{
if
(!
scheduleThreadT
oStop
)
{
logger
.
error
(
">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}"
,
e
);
}
}
finally
{
...
...
@@ -152,7 +153,7 @@ public class JobScheduleHelper {
TimeUnit
.
MILLISECONDS
.
sleep
(
1000
-
System
.
currentTimeMillis
()%
1000
);
}
}
catch
(
InterruptedException
e
)
{
if
(!
t
oStop
)
{
if
(!
scheduleThreadT
oStop
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
...
...
@@ -175,13 +176,13 @@ public class JobScheduleHelper {
try
{
TimeUnit
.
MILLISECONDS
.
sleep
(
1000
-
System
.
currentTimeMillis
()%
1000
);
}
catch
(
InterruptedException
e
)
{
if
(!
t
oStop
)
{
if
(!
ringThreadT
oStop
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
int
lastSecond
=
-
1
;
while
(!
t
oStop
)
{
while
(!
ringThreadT
oStop
)
{
try
{
// second data
...
...
@@ -216,7 +217,7 @@ public class JobScheduleHelper {
ringItemData
.
clear
();
}
}
catch
(
Exception
e
)
{
if
(!
t
oStop
)
{
if
(!
ringThreadT
oStop
)
{
logger
.
error
(
">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}"
,
e
);
}
}
...
...
@@ -225,7 +226,7 @@ public class JobScheduleHelper {
try
{
TimeUnit
.
MILLISECONDS
.
sleep
(
1000
-
System
.
currentTimeMillis
()%
1000
);
}
catch
(
InterruptedException
e
)
{
if
(!
t
oStop
)
{
if
(!
ringThreadT
oStop
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
...
...
@@ -239,23 +240,61 @@ public class JobScheduleHelper {
}
public
void
toStop
(){
toStop
=
true
;
//
interrupt and wait
scheduleThread
.
interrupt
()
;
//
1、stop schedule
scheduleThread
ToStop
=
true
;
try
{
scheduleThread
.
join
();
TimeUnit
.
SECONDS
.
sleep
(
1
);
// wait
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
if
(
scheduleThread
.
getState
()
!=
Thread
.
State
.
TERMINATED
){
// interrupt and wait
scheduleThread
.
interrupt
();
try
{
scheduleThread
.
join
();
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
// interrupt and wait
ringThread
.
interrupt
();
// if has ring data
boolean
hasRingData
=
false
;
if
(!
ringData
.
isEmpty
())
{
for
(
int
second
:
ringData
.
keySet
())
{
List
<
Integer
>
tmpData
=
ringData
.
get
(
second
);
if
(
tmpData
!=
null
&&
tmpData
.
size
()>
0
)
{
hasRingData
=
true
;
break
;
}
}
}
if
(
hasRingData
)
{
try
{
TimeUnit
.
SECONDS
.
sleep
(
8
);
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
// stop ring (wait job-in-memory stop)
ringThreadToStop
=
true
;
try
{
ringThread
.
join
(
);
TimeUnit
.
SECONDS
.
sleep
(
1
);
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
if
(
ringThread
.
getState
()
!=
Thread
.
State
.
TERMINATED
){
// interrupt and wait
ringThread
.
interrupt
();
try
{
ringThread
.
join
();
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
logger
.
info
(
">>>>>>>>>>> xxl-job, JobScheduleHelper stop"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment