xuxueli hace 8 años
padre
commit
2190120de5

+ 2 - 2
README.md Ver fichero

37
 
37
 
38
 
38
 
39
 ## Documentation
39
 ## Documentation
40
-- [中文文档](https://github.com/xuxueli/xxl-job/blob/master/doc/XXL-JOB官方文档.md)
41
-- [English Documentation](https://github.com/xuxueli/xxl-job/blob/master/doc/XXL-JOB-English-Documentation.md)
40
+- [中文文档](http://www.xuxueli.com/xxl-job/)
41
+- [English Documentation](http://www.xuxueli.com/xxl-job/en/)
42
 
42
 
43
 
43
 
44
 ## Features
44
 ## Features

+ 88 - 85
doc/XXL-JOB-English-Documentation.md Ver fichero

1
-# 《A lightweight distributed task scheduling framework. "XXL-JOB"
1
+# 《Distributed task scheduling framework XXL-JOB
2
 
2
 
3
 [![Build Status](https://travis-ci.org/xuxueli/xxl-job.svg?branch=master)](https://travis-ci.org/xuxueli/xxl-job)
3
 [![Build Status](https://travis-ci.org/xuxueli/xxl-job.svg?branch=master)](https://travis-ci.org/xuxueli/xxl-job)
4
 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
4
 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
41
 In 2015 - December, I will XXL-JOB published to our internal knowledge base, and get internal colleagues recognized.
41
 In 2015 - December, I will XXL-JOB published to our internal knowledge base, and get internal colleagues recognized.
42
 In 2016 - 01 months, my company started XXL-JOB internal access and custom work, in this thank Yuan and Yin two colleagues contribution, but also to thank the internal other attention and support colleagues.
42
 In 2016 - 01 months, my company started XXL-JOB internal access and custom work, in this thank Yuan and Yin two colleagues contribution, but also to thank the internal other attention and support colleagues.
43
 In 2017-05-13, the link of "let the code run" in "[the 62nd source of open source China Genesis](https://www.oschina.net/event/2236961)" held in Shanghai,, I stepped on and made a speech about the XXL-JOB, five hundred spectators in the audience reacted enthusiastically ([pictorial review](https://www.oschina.net/question/2686220_2242120)).
43
 In 2017-05-13, the link of "let the code run" in "[the 62nd source of open source China Genesis](https://www.oschina.net/event/2236961)" held in Shanghai,, I stepped on and made a speech about the XXL-JOB, five hundred spectators in the audience reacted enthusiastically ([pictorial review](https://www.oschina.net/question/2686220_2242120)).
44
-#### My company have access to XXL-JOB, internal alias "Ferrari" (Ferrari based on XXL-JOB V1.1 version customization, new access application recommended to upgrade the latest version).
44
+> Our company have access to XXL-JOB, internal alias "Ferrari" (Ferrari based on XXL-JOB V1.1 version customization, new access application recommended to upgrade the latest version).
45
 According to the latest statistics, from 2016-01-21 to 2017-07-07 period, the system has been scheduled about 600,000 times, outstanding performance. New access applications recommend the latest version, because after several major updates, the system's task model, UI interaction model and the underlying scheduling communication model has a greater optimization and upgrading, the core function more stable and efficient.
45
 According to the latest statistics, from 2016-01-21 to 2017-07-07 period, the system has been scheduled about 600,000 times, outstanding performance. New access applications recommend the latest version, because after several major updates, the system's task model, UI interaction model and the underlying scheduling communication model has a greater optimization and upgrading, the core function more stable and efficient.
46
+
46
 So far, XXL-JOB has access to a number of companies online product line, access to scenes such as electronic commerce, O2O business and large data operations, as of 2016-07-19, XXL-JOB has access to the company But not limited to:
47
 So far, XXL-JOB has access to a number of companies online product line, access to scenes such as electronic commerce, O2O business and large data operations, as of 2016-07-19, XXL-JOB has access to the company But not limited to:
47
 
48
 
48
 	- 1、大众点评;
49
 	- 1、大众点评;
82
     - 35、北京诺亦腾科技有限公司
83
     - 35、北京诺亦腾科技有限公司
83
     - 36、增长引擎(北京)信息技术有限公司
84
     - 36、增长引擎(北京)信息技术有限公司
84
 	- ……
85
 	- ……
85
-	
86
+
87
+> The company that access and use this product is welcome to register at the [address](https://github.com/xuxueli/xxl-job/issues/1 ), only for product promotion. 
88
+
86
 Welcome everyone's attention and use, XXL-JOB will also embrace changes, sustainable development.
89
 Welcome everyone's attention and use, XXL-JOB will also embrace changes, sustainable development.
87
 
90
 
88
 ### 1.4 Download
91
 ### 1.4 Download
89
 
92
 
93
+#### Documentation
94
+- [中文文档](http://www.xuxueli.com/xxl-job/)
95
+- [English Documentation](http://www.xuxueli.com/xxl-job/en/)
96
+
90
 #### Source repository address (The latest code will be released in the two git warehouse in the same time)
97
 #### Source repository address (The latest code will be released in the two git warehouse in the same time)
91
 
98
 
92
 Source repository address | Release Download
99
 Source repository address | Release Download
104
 </dependency>
111
 </dependency>
105
 ```
112
 ```
106
 
113
 
107
-#### Blog address
108
-
109
-- [oschina address](http://my.oschina.net/xuxueli/blog/690978)
110
-- [cnblogs address](http://www.cnblogs.com/xuxueli/p/5021979.html)
111
-
112
 #### Technical exchange group (technical exchange only)
114
 #### Technical exchange group (technical exchange only)
113
 
115
 
114
-- Group 6:399758605
115
-- Group 5:138274130    (Group is full, please add group 6)
116
-- Group 4:464762661    (Group is full, please add group 6)
117
-- Group 3:242151780    (Group is full, please add group 6)
118
-- Group 2:438249535    (Group is full, please add group 6)
119
-- Group 1:367260654    (Group is full, please add group 6)
116
+- Tecent QQ Group 6:399758605
117
+- Tecent QQ Group 5:138274130
118
+- Tecent QQ Group 4:464762661
119
+- Tecent QQ Group 3:242151780
120
+- Tecent QQ Group 2:438249535
121
+- Tecent QQ Group 1:367260654
122
+- [Gitter](https://gitter.im/xuxueli/xxl-job)
120
 
123
 
121
 ### 1.5 Environment
124
 ### 1.5 Environment
122
 - JDK:1.7+
125
 - JDK:1.7+
399
 
402
 
400
 
403
 
401
 ## 4. Task Management
404
 ## 4. Task Management
402
-#### 4.0 configure executor
405
+### 4.0 configure executor
403
 click"执行器管理" on the left menu,it will go to the page as shown below:
406
 click"执行器管理" on the left menu,it will go to the page as shown below:
404
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223509_Hr2T.png "在这里输入图片标题")
407
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223509_Hr2T.png "在这里输入图片标题")
405
 
408
 
409
 If you want to create a new executor,please click "+新增执行器" button: 
412
 If you want to create a new executor,please click "+新增执行器" button: 
410
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223617_g3Im.png "在这里输入图片标题")
413
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223617_g3Im.png "在这里输入图片标题")
411
 
414
 
412
-#### Description of executor attributes
415
+### Description of executor attributes
413
 
416
 
414
     AppName: the unique identity of the executor cluster,executor will registe automatically and periodically by appName so that it can be scheduled.
417
     AppName: the unique identity of the executor cluster,executor will registe automatically and periodically by appName so that it can be scheduled.
415
     名称: the name of ther executor,it is used to describe the executor.
418
     名称: the name of ther executor,it is used to describe the executor.
419
         手动录入:fill in executor address manually and it will be used by schedule center, multiple address separated by commas. 
422
         手动录入:fill in executor address manually and it will be used by schedule center, multiple address separated by commas. 
420
     机器地址:only effective when "注册方式" is "手动录入",support fill in executor address manually.
423
     机器地址:only effective when "注册方式" is "手动录入",support fill in executor address manually.
421
 
424
 
422
-#### 4.1 create new task
425
+### 4.1 create new task
423
 Go to task management list page,click “新增任务” button on the upper right corner,on the pop-up window“新增任务”page configure task property and save.learn more info please go and see "3,task details".
426
 Go to task management list page,click “新增任务” button on the upper right corner,on the pop-up window“新增任务”page configure task property and save.learn more info please go and see "3,task details".
424
 
427
 
425
-#### 4.2 edit task
428
+### 4.2 edit task
426
 Go to task management list page and choose the task you want to edit ,click”编辑”button on the right side of the task,on the pop-up window “编辑任务”page edit task property and save.
429
 Go to task management list page and choose the task you want to edit ,click”编辑”button on the right side of the task,on the pop-up window “编辑任务”page edit task property and save.
427
 
430
 
428
-#### 4.3 edit GLUE source code
431
+### 4.3 edit GLUE source code
429
 
432
 
430
 Only fit to GLUE task.
433
 Only fit to GLUE task.
431
 
434
 
432
 choose the task you want to edit and click” GLUE”button on the right side of the task, it will go to the Web IDE page of GLUE task,then you can edit task source code on this page.you can read "3.2 GLUE模式(Java)" for more info.
435
 choose the task you want to edit and click” GLUE”button on the right side of the task, it will go to the Web IDE page of GLUE task,then you can edit task source code on this page.you can read "3.2 GLUE模式(Java)" for more info.
433
 
436
 
434
-#### 4.4 pause/recover task
437
+### 4.4 pause/recover task
435
 You can pause or recover task but it just fit to follow up schedule trigger and won’t affect scheduled tasks,if you want to stop tasks which has been triggered,please go and see “4.8 stop the running task”
438
 You can pause or recover task but it just fit to follow up schedule trigger and won’t affect scheduled tasks,if you want to stop tasks which has been triggered,please go and see “4.8 stop the running task”
436
 
439
 
437
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24130337_ZAhX.png "在这里输入图片标题")
440
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24130337_ZAhX.png "在这里输入图片标题")
438
 
441
 
439
-#### 4.5 manually trigger
442
+### 4.5 manually trigger
440
 You can trigger a task manually by Click “执行”button,it won’t affect original scheduling rules.
443
 You can trigger a task manually by Click “执行”button,it won’t affect original scheduling rules.
441
 
444
 
442
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133348_Z5wp.png "在这里输入图片标题")
445
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133348_Z5wp.png "在这里输入图片标题")
443
 
446
 
444
-#### 4.6 view schedule log
447
+### 4.6 view schedule log
445
 You can view task’s history schedule log by click “日志” button,on the history schedule log list page you can view every time of task’s schedule result,execution result and so on,click “执行日志” button can view the task’s full execute log.
448
 You can view task’s history schedule log by click “日志” button,on the history schedule log list page you can view every time of task’s schedule result,execution result and so on,click “执行日志” button can view the task’s full execute log.
446
 
449
 
447
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133500_9235.png "在这里输入图片标题")
450
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133500_9235.png "在这里输入图片标题")
461
         "执行日志"button:click this button you can view task’s execution detail log,go and see chapter 4.7 “view execution log” for more info;
464
         "执行日志"button:click this button you can view task’s execution detail log,go and see chapter 4.7 “view execution log” for more info;
462
         "终止任务"button:click this button you can stop the task’s execution thread on this executor,include bloked task instance which didn’t has started;
465
         "终止任务"button:click this button you can stop the task’s execution thread on this executor,include bloked task instance which didn’t has started;
463
 
466
 
464
-#### 4.7 view execution log
467
+### 4.7 view execution log
465
 Click the “执行日志” button on the right side of the record,you can go to the execution log page,you can view the full execution log of the logic business code, shown as below:
468
 Click the “执行日志” button on the right side of the record,you can go to the execution log page,you can view the full execution log of the logic business code, shown as below:
466
 
469
 
467
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/25124816_tvGI.png "在这里输入图片标题")
470
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/25124816_tvGI.png "在这里输入图片标题")
468
 
471
 
469
-#### 4.8 stop running tasks
472
+### 4.8 stop running tasks
470
 Just fit to running tasks,on the task log list page,click “终止任务” button on the right side of the record, it will send stop command to the executor where the task was executed,finally the task was killed and the task instance execute queue of this task will be clear.
473
 Just fit to running tasks,on the task log list page,click “终止任务” button on the right side of the record, it will send stop command to the executor where the task was executed,finally the task was killed and the task instance execute queue of this task will be clear.
471
 
474
 
472
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140048_hIci.png "在这里输入图片标题")
475
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140048_hIci.png "在这里输入图片标题")
488
 If JobHandler start child thread,child thread also must not catch InterruptedException,and it should throw exception.
491
 If JobHandler start child thread,child thread also must not catch InterruptedException,and it should throw exception.
489
 
492
 
490
 
493
 
491
-#### 4.9 delete execution log
494
+### 4.9 delete execution log
492
 On the task log list page, after you select executor and task, you can click"删除" button on the right side and it will pop-up "日志清理" window,on the pop-up window you can choose different log delete policy,choose the policy you want to execute and click "确定" button it will delele relative logs:
495
 On the task log list page, after you select executor and task, you can click"删除" button on the right side and it will pop-up "日志清理" window,on the pop-up window you can choose different log delete policy,choose the policy you want to execute and click "确定" button it will delele relative logs:
493
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08210711_Ypik.png "在这里输入图片标题")
496
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08210711_Ypik.png "在这里输入图片标题")
494
 
497
 
495
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08211152_EB65.png "在这里输入图片标题")
498
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08211152_EB65.png "在这里输入图片标题")
496
 
499
 
497
-#### 4.10 delete task
500
+### 4.10 delete task
498
 Click the delete button on the right side of the task,the task will be deteted.
501
 Click the delete button on the right side of the task,the task will be deteted.
499
 
502
 
500
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140641_Z9Qr.png "在这里输入图片标题")
503
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140641_Z9Qr.png "在这里输入图片标题")
501
 
504
 
502
 ## 5. Overall design
505
 ## 5. Overall design
503
-#### 5.1 Source directory introduction
506
+### 5.1 Source directory introduction
504
     - /doc :documentation and material
507
     - /doc :documentation and material
505
     - /db :db scripts
508
     - /db :db scripts
506
     - /xxl-job-admin :schedule and admin center
509
     - /xxl-job-admin :schedule and admin center
507
     - /xxl-job-core :common core Jar
510
     - /xxl-job-core :common core Jar
508
     - /xxl-job-executor-samples :executor,Demo project(you can develop on this demo project or adjust your own exist project to executor project)
511
     - /xxl-job-executor-samples :executor,Demo project(you can develop on this demo project or adjust your own exist project to executor project)
509
 
512
 
510
-#### 5.2 configure database
513
+### 5.2 configure database
511
 XXL-JOB schedule module is implemented based on Quartz cluster,it’s “database” is extended based on Quartz’s 11 mysql tables.
514
 XXL-JOB schedule module is implemented based on Quartz cluster,it’s “database” is extended based on Quartz’s 11 mysql tables.
512
 
515
 
513
 XXL-JOB custom Quartz table structure prefix(XXL_JOB_QRTZ_).
516
 XXL-JOB custom Quartz table structure prefix(XXL_JOB_QRTZ_).
523
 
526
 
524
 So XXL-JOB database total has 16 tables.
527
 So XXL-JOB database total has 16 tables.
525
 
528
 
526
-#### 5.3 Architecture design
527
-##### 5.3.1 Design target
529
+### 5.3 Architecture design
530
+#### 5.3.1 Design target
528
 All schedule behavior has been abstracted into “schedule center” common platform , it dosen’t include business logic and just responsible for starting schedule requests.
531
 All schedule behavior has been abstracted into “schedule center” common platform , it dosen’t include business logic and just responsible for starting schedule requests.
529
 
532
 
530
 All tasks was abstracted into separate JobHandler and was managed by executors, executor is responsible for receiving schedule request and execute the relative JobHandler business.
533
 All tasks was abstracted into separate JobHandler and was managed by executors, executor is responsible for receiving schedule request and execute the relative JobHandler business.
531
 
534
 
532
 So schedule and task can be decoupled from each other, by the way it can improve the overall stability and scalability of the system.
535
 So schedule and task can be decoupled from each other, by the way it can improve the overall stability and scalability of the system.
533
 
536
 
534
-##### 5.3.2 System composition
537
+#### 5.3.2 System composition
535
 - **Schedule module(schedule center)**:
538
 - **Schedule module(schedule center)**:
536
     it is responsible for manage schedule info,send schedule request accord task configuration and it is not include an business code.schedule system decouple with the task, improve the overall stability and scalability of the system, at the same time schedule system performance is no longer limited to task modules. 
539
     it is responsible for manage schedule info,send schedule request accord task configuration and it is not include an business code.schedule system decouple with the task, improve the overall stability and scalability of the system, at the same time schedule system performance is no longer limited to task modules. 
537
     Support visualization, simple and dynamic management schedule information, include create,update,delete, GLUE develop and task alarm and so on, All of the above operations will take effect in real time,support monitor schedule result and execution log and executor failover.
540
     Support visualization, simple and dynamic management schedule information, include create,update,delete, GLUE develop and task alarm and so on, All of the above operations will take effect in real time,support monitor schedule result and execution log and executor failover.
539
     it is responsible for receive schedule request and execute task logic,task module focuses on the execution of the task, Development and maintenance is simpler and more efficient.
542
     it is responsible for receive schedule request and execute task logic,task module focuses on the execution of the task, Development and maintenance is simpler and more efficient.
540
     Receive execution request, end request and log request from schedule center.
543
     Receive execution request, end request and log request from schedule center.
541
 
544
 
542
-##### 5.3.3 Architecture diagram
545
+#### 5.3.3 Architecture diagram
543
 
546
 
544
 ![输入图片说明](https://static.oschina.net/uploads/img/201707/17190028_aEE2.png "在这里输入图片标题")
547
 ![输入图片说明](https://static.oschina.net/uploads/img/201707/17190028_aEE2.png "在这里输入图片标题")
545
 
548
 
546
-#### 5.4 Schedule module analysis
547
-##### 5.4.1 Disadvantage of quartz
549
+### 5.4 Schedule module analysis
550
+#### 5.4.1 Disadvantage of quartz
548
 Quartz is a good open source project and was often as the first choice for job schedule.Tasks was managed by api in quartz cluster so it can avoid some  disadvantages of single quartz instance,but it also has some disadvantage as shown below:
551
 Quartz is a good open source project and was often as the first choice for job schedule.Tasks was managed by api in quartz cluster so it can avoid some  disadvantages of single quartz instance,but it also has some disadvantage as shown below:
549
     - problem 1:it is not humane while operate task by call apill.
552
     - problem 1:it is not humane while operate task by call apill.
550
     - problem 2:it is need to store business QuartzJobBean into database, System Invasion is quite serious.
553
     - problem 2:it is need to store business QuartzJobBean into database, System Invasion is quite serious.
551
     - problem 3:schedule logic and couple with QuartzJobBean in the same project,it will lead a problem in case that if schedule tasks gradually increased and task logic gradually increased,under this situation the performance of the schedule system will be greatly limited by business.
554
     - problem 3:schedule logic and couple with QuartzJobBean in the same project,it will lead a problem in case that if schedule tasks gradually increased and task logic gradually increased,under this situation the performance of the schedule system will be greatly limited by business.
552
 XXL-JOB solve above problems of quartz.
555
 XXL-JOB solve above problems of quartz.
553
 
556
 
554
-##### 5.4.2 RemoteHttpJobBean
557
+#### 5.4.2 RemoteHttpJobBean
555
 Under Quartz develop,task logic often was maintained by QuartzJobBean, couple is very serious.in XXL-JOB"Schedule module" and "task module" are completely decoupled,all scheduled tasks in schedule module use the same QuartzJobBean called RemoteHttpJobBean.the params of the tasks was maintained in the extended tables,when trigger RemoteHttpJobBean,it will parse different params and start remote cal l and it wil call relative remote executor.
558
 Under Quartz develop,task logic often was maintained by QuartzJobBean, couple is very serious.in XXL-JOB"Schedule module" and "task module" are completely decoupled,all scheduled tasks in schedule module use the same QuartzJobBean called RemoteHttpJobBean.the params of the tasks was maintained in the extended tables,when trigger RemoteHttpJobBean,it will parse different params and start remote cal l and it wil call relative remote executor.
556
 
559
 
557
 This call module is like RPC,RemoteHttpJobBean provide call proxy functionality,the executor is provided as remote service.
560
 This call module is like RPC,RemoteHttpJobBean provide call proxy functionality,the executor is provided as remote service.
558
 
561
 
559
-##### 5.4.3 Schedule Center HA(Cluster)
562
+#### 5.4.3 Schedule Center HA(Cluster)
560
 It is based on Quartz cluster,databse use Mysql;while QUARTZ task schedule is used in Clustered Distributed Concurrent Environment,all nodes will report task info and store into database.it will fetch trigger from database while execute task,if trigger name and execute time is the same only one node will execute the task.
563
 It is based on Quartz cluster,databse use Mysql;while QUARTZ task schedule is used in Clustered Distributed Concurrent Environment,all nodes will report task info and store into database.it will fetch trigger from database while execute task,if trigger name and execute time is the same only one node will execute the task.
561
 
564
 
562
 ```
565
 ```
568
 org.quartz.jobStore.clusterCheckinInterval: 1000
571
 org.quartz.jobStore.clusterCheckinInterval: 1000
569
 ```
572
 ```
570
 
573
 
571
-##### 5.4.4 Schedule threadpool
574
+#### 5.4.4 Schedule threadpool
572
 Default threads in the threadpool is 10 so it can avoid task schedule delay because of single thread block.
575
 Default threads in the threadpool is 10 so it can avoid task schedule delay because of single thread block.
573
 
576
 
574
 ```
577
 ```
582
 
585
 
583
 the logic of task in XXL-JOB schedule center is very light and single job average run time alaways under 100ms,(most  is network time consume).so it can use limited threads to support a large mount of job run concurrently, 10 threads configured above can support at least 100 JOB normal execution.
586
 the logic of task in XXL-JOB schedule center is very light and single job average run time alaways under 100ms,(most  is network time consume).so it can use limited threads to support a large mount of job run concurrently, 10 threads configured above can support at least 100 JOB normal execution.
584
 
587
 
585
-##### 5.4.5 @DisallowConcurrentExecution
588
+#### 5.4.5 @DisallowConcurrentExecution
586
 This annotation is not used default by the schedule center of XXL-JOB schedule module, it use concurrent policy default,because RemoteHttpJobBean is common QuartzJobBean,so it greatly improve the capacity of schedule system and decrease the blocked chance of schedule module in the case of multi-threaded schedule.
589
 This annotation is not used default by the schedule center of XXL-JOB schedule module, it use concurrent policy default,because RemoteHttpJobBean is common QuartzJobBean,so it greatly improve the capacity of schedule system and decrease the blocked chance of schedule module in the case of multi-threaded schedule.
587
 
590
 
588
 Every schedule module was scheduled and executed parallel in XXL-JOB,but tasks in executor is executed serially and support stop task.
591
 Every schedule module was scheduled and executed parallel in XXL-JOB,but tasks in executor is executed serially and support stop task.
589
 
592
 
590
-##### 5.4.6 misfire
593
+#### 5.4.6 misfire
591
 The handle policy when miss the job’s trigger time.
594
 The handle policy when miss the job’s trigger time.
592
 he reason may be:restart service,schedule thread was blocked by QuartzJobBean, threads was exhausted,some task enable @DisallowConcurrentExecution,the last schedule  was blocked and next schedule was missed.
595
 he reason may be:restart service,schedule thread was blocked by QuartzJobBean, threads was exhausted,some task enable @DisallowConcurrentExecution,the last schedule  was blocked and next schedule was missed.
593
 
596
 
608
 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
611
 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
609
 ```
612
 ```
610
 
613
 
611
-##### 5.4.7 log callback service
614
+#### 5.4.7 log callback service
612
 When schedule center of the schedule module was deployed as web service, on one side it play as schedule center, on the other side it also provide api service for executor. 
615
 When schedule center of the schedule module was deployed as web service, on one side it play as schedule center, on the other side it also provide api service for executor. 
613
 
616
 
614
 The source code location of schedule center’s “log callback api service” as shown below:
617
 The source code location of schedule center’s “log callback api service” as shown below:
618
 
621
 
619
 Executor will execute task when it receive task execute request.it will notify the task execute result to schedule center when the task is done. 
622
 Executor will execute task when it receive task execute request.it will notify the task execute result to schedule center when the task is done. 
620
 
623
 
621
-##### 5.4.8 task HA(Failover)
624
+#### 5.4.8 task HA(Failover)
622
 If executor project was deployed as cluster schedule center will known all online executor nodes,such as:“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”.
625
 If executor project was deployed as cluster schedule center will known all online executor nodes,such as:“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”.
623
 
626
 
624
 When "路由策略" select "故障转移(FAILOVER)",it will send heart beat check request in order while schedule center start schedule request.  The first alive checked executor node will be selected and send schedule request to it.
627
 When "路由策略" select "故障转移(FAILOVER)",it will send heart beat check request in order while schedule center start schedule request.  The first alive checked executor node will be selected and send schedule request to it.
629
 
632
 
630
 “调度备注” will display local schedule route path、executor’s "注册方式"、"地址列表" and task’s "路由策略"。Under "故障转移(FAILOVER)" policy, schedule center take first address to do heartbeat detection, heat beat fail will automatically skip, the second address heart beat fail…… until the third address “127.0.0.1:9999” heart beat success, it was selected as target executor, then send schedule request to target executor, now the schedule process is end wait for the executor’s callback execution result.
633
 “调度备注” will display local schedule route path、executor’s "注册方式"、"地址列表" and task’s "路由策略"。Under "故障转移(FAILOVER)" policy, schedule center take first address to do heartbeat detection, heat beat fail will automatically skip, the second address heart beat fail…… until the third address “127.0.0.1:9999” heart beat success, it was selected as target executor, then send schedule request to target executor, now the schedule process is end wait for the executor’s callback execution result.
631
 
634
 
632
-##### 5.4.9 schedule log
635
+#### 5.4.9 schedule log
633
 Every time when task was scheduled in the schedule center it will record a task log, the task log include three part as shown below:
636
 Every time when task was scheduled in the schedule center it will record a task log, the task log include three part as shown below:
634
 
637
 
635
 - 任务信息:include executor address、JobHandler and executor params,accord these parameters it can locate specific machine and task code that the task will be executed.
638
 - 任务信息:include executor address、JobHandler and executor params,accord these parameters it can locate specific machine and task code that the task will be executed.
650
 - 执行备注:task execute remark info in the executor,such as exception log.
653
 - 执行备注:task execute remark info in the executor,such as exception log.
651
 - 执行日志:full execution log of the business code during execution of the task,go and see “4.7 view execution log”.
654
 - 执行日志:full execution log of the business code during execution of the task,go and see “4.7 view execution log”.
652
 
655
 
653
-##### 5.4.10 Task dependency
656
+#### 5.4.10 Task dependency
654
 principle:every task has a task key in XXL-JOB, every task can configure property “child task Key”,it can match task dependency relationship through task key.
657
 principle:every task has a task key in XXL-JOB, every task can configure property “child task Key”,it can match task dependency relationship through task key.
655
 
658
 
656
 When parent task end execute and success, it will match child task dependency accord child task key, it will trigger child task execute once if it matched child task.
659
 When parent task end execute and success, it will match child task dependency accord child task key, it will trigger child task execute once if it matched child task.
661
 
664
 
662
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
665
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
663
 
666
 
664
-#### 5.5 Task "run mode" analysis
665
-##### 5.5.1 "Bean模式" task
667
+### 5.5 Task "run mode" analysis
668
+#### 5.5.1 "Bean模式" task
666
 Development steps:go and see "chapter 3" . 
669
 Development steps:go and see "chapter 3" . 
667
 principle: every Bean mode task is a Spring Bean instance and it is maintained in executor project’s Spring container. task class nedd to add “@JobHander(value="name")” annotation, because executor identify task bean instance in spring container through annotation. Task class nedd to implements interface IJobHandler, task logic code in method execute(), the task logic in execute() method will be executed when executor received a schedule request from schedule center.
670
 principle: every Bean mode task is a Spring Bean instance and it is maintained in executor project’s Spring container. task class nedd to add “@JobHander(value="name")” annotation, because executor identify task bean instance in spring container through annotation. Task class nedd to implements interface IJobHandler, task logic code in method execute(), the task logic in execute() method will be executed when executor received a schedule request from schedule center.
668
 
671
 
669
-##### 5.5.2 "GLUE模式(Java)" task
672
+#### 5.5.2 "GLUE模式(Java)" task
670
 Development steps:go and see "chapter 3" .
673
 Development steps:go and see "chapter 3" .
671
 Principle : every "GLUE模式(Java)" task code is a class implemets interface IJobHandler, when executor received schedule request from schedule center these code will be loaded by Groovy classloader and instantiate into a Java object and inject spring bean service declared in this code at the same time(please confirm service and class reference in Glue code exist in executor project), then call the object’s execute() method and execute task logic.
674
 Principle : every "GLUE模式(Java)" task code is a class implemets interface IJobHandler, when executor received schedule request from schedule center these code will be loaded by Groovy classloader and instantiate into a Java object and inject spring bean service declared in this code at the same time(please confirm service and class reference in Glue code exist in executor project), then call the object’s execute() method and execute task logic.
672
 
675
 
680
     - python script: python script task will be enabled when select " GLUE模式(Python)"as task run mode.
683
     - python script: python script task will be enabled when select " GLUE模式(Python)"as task run mode.
681
     
684
     
682
 
685
 
683
-##### 5.5.4 executor
686
+#### 5.5.4 executor
684
 Executor is actually an embedded Jetty server with default port 9999, as shown below(parameter:xxl.job.executor.port).
687
 Executor is actually an embedded Jetty server with default port 9999, as shown below(parameter:xxl.job.executor.port).
685
 
688
 
686
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
689
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
689
 
692
 
690
 When executor received schedule request from schedule center, if task type is “Bean模式” it will match bean mode task in Spring container and call it’s execute() method and execute task logic. if task type is “GLUE模式”, it will load Glue code, instantiate a Java object and inject other spring service(notice: the spring service injected in Glue code must exist in the same executor project), then call execute() method and execute task logic. 
693
 When executor received schedule request from schedule center, if task type is “Bean模式” it will match bean mode task in Spring container and call it’s execute() method and execute task logic. if task type is “GLUE模式”, it will load Glue code, instantiate a Java object and inject other spring service(notice: the spring service injected in Glue code must exist in the same executor project), then call execute() method and execute task logic. 
691
 
694
 
692
-##### 5.5.5 task log
695
+#### 5.5.5 task log
693
 XXL-JOB will generate a log file for every schedule request, the log info will be recorded by XxlJobLogger.log() method, the log file will be loaded when view log info through schedule center.
696
 XXL-JOB will generate a log file for every schedule request, the log info will be recorded by XxlJobLogger.log() method, the log file will be loaded when view log info through schedule center.
694
 
697
 
695
 (history version is implemented by overriding LOG4J’s Appender so it exists dependency restrictions, The way has been discraded in the new version)
698
 (history version is implemented by overriding LOG4J’s Appender so it exists dependency restrictions, The way has been discraded in the new version)
698
 
701
 
699
 When start child thread in JobHandler, child thread will print log in parent JobHandler thread’s execute log in order to trace execute log.
702
 When start child thread in JobHandler, child thread will print log in parent JobHandler thread’s execute log in order to trace execute log.
700
 
703
 
701
-#### 5.6 Communication module analysis
704
+### 5.6 Communication module analysis
702
 
705
 
703
-##### 5.6.1 A complete task schedule communication process
706
+#### 5.6.1 A complete task schedule communication process
704
     - 1,schedule center send http request to executor, and the service in executor in fact is a jetty server with default port 9999.
707
     - 1,schedule center send http request to executor, and the service in executor in fact is a jetty server with default port 9999.
705
     - 2,executor execute task logic.
708
     - 2,executor execute task logic.
706
     - 3,executor http callback with schedule center for schedule result, the service in schedule center used to receive callback request from executor is a set of api opended to executor.
709
     - 3,executor http callback with schedule center for schedule result, the service in schedule center used to receive callback request from executor is a set of api opended to executor.
707
 
710
 
708
-##### 5.6.2 Encrypt Communication data
711
+#### 5.6.2 Encrypt Communication data
709
 When scheduler center send request to executor, it will use RequestModel and ResponseModel object to encapsulate schedule request parameters and response data, these two object will be serialized before communication, data protocol and time stamp will be checked so that achieve data encryption target.
712
 When scheduler center send request to executor, it will use RequestModel and ResponseModel object to encapsulate schedule request parameters and response data, these two object will be serialized before communication, data protocol and time stamp will be checked so that achieve data encryption target.
710
 
713
 
711
-#### 5.7 task register and task auto discover  
714
+### 5.7 task register and task auto discover  
712
 Task executor machine property has been canceled from v1.5, instead of task register and auto discovery, get remote machine address dynamic.
715
 Task executor machine property has been canceled from v1.5, instead of task register and auto discovery, get remote machine address dynamic.
713
 
716
 
714
     AppName: unique identify of executor cluster,  executor is minimal unite of task register, every task recognize machine addresses under the executor on which it was binded.
717
     AppName: unique identify of executor cluster,  executor is minimal unite of task register, every task recognize machine addresses under the executor on which it was binded.
717
 
720
 
718
 To ensure system lightweight and reduce learning costs, it did not use Zookeeper as register center, Use DB as register center to do task registration.
721
 To ensure system lightweight and reduce learning costs, it did not use Zookeeper as register center, Use DB as register center to do task registration.
719
 
722
 
720
-#### 5.8 task execute result
723
+### 5.8 task execute result
721
 Since v1.6.2, the task execute result is recognized through ReturnT of IJobHandler, it executes success when return value meets the condition "ReturnT.code == ReturnT.SUCCESS_CODE" , or it executes fail, and it can callback error message info to schedule center through ReturnT.msg, so it can control task execute results in the task logic.
724
 Since v1.6.2, the task execute result is recognized through ReturnT of IJobHandler, it executes success when return value meets the condition "ReturnT.code == ReturnT.SUCCESS_CODE" , or it executes fail, and it can callback error message info to schedule center through ReturnT.msg, so it can control task execute results in the task logic.
722
 
725
 
723
-#### 5.9 slice broadcat & dynamic slice   
726
+### 5.9 slice broadcat & dynamic slice   
724
 When “分片广播” is selected as route policy in executor cluster, one task schedule will broadcast all executor node in cluster to trigger task execute in every executor, pass slice parameter at the same time, so we can develop slice task by slice parameters. 
727
 When “分片广播” is selected as route policy in executor cluster, one task schedule will broadcast all executor node in cluster to trigger task execute in every executor, pass slice parameter at the same time, so we can develop slice task by slice parameters. 
725
 
728
 
726
 "分片广播"  break the task by the dimensions of executor, support dynamic extend executor cluster so that it can add slice number dynamically to do business process, In case of large amount of data process can significantly improve task processing capacity and speed.
729
 "分片广播"  break the task by the dimensions of executor, support dynamic extend executor cluster so that it can add slice number dynamically to do business process, In case of large amount of data process can significantly improve task processing capacity and speed.
738
 - 1、slice task scene:when 10 executor to handle 10w records,  1w records need to be handled per machine, time-consuming 10 times lower;
741
 - 1、slice task scene:when 10 executor to handle 10w records,  1w records need to be handled per machine, time-consuming 10 times lower;
739
 - 2、Broadcast task scene:broadcast all cluster nodes to execute shell script、broadcast all cluster nodes to update cache.
742
 - 2、Broadcast task scene:broadcast all cluster nodes to execute shell script、broadcast all cluster nodes to update cache.
740
 
743
 
741
-#### 5.10 AccessToken
744
+### 5.10 AccessToken
742
 To improve system security it is need to check security between schedule center and executor, just allow communication between them when AccessToken of each other matched.
745
 To improve system security it is need to check security between schedule center and executor, just allow communication between them when AccessToken of each other matched.
743
 
746
 
744
 The AccessToken of scheduler center and executor can be configured by xxl.job.accessToken.
747
 The AccessToken of scheduler center and executor can be configured by xxl.job.accessToken.
750
 
753
 
751
 
754
 
752
 ## 6 Version update log
755
 ## 6 Version update log
753
-#### 6.1 version V1.1.x,New features [2015-12-05]
756
+### 6.1 version V1.1.x,New features [2015-12-05]
754
 **【since V1.1.x,XXL-JOB was used by company hiring me,alias Ferrari inner company,the latest version is recommended for new project】**
757
 **【since V1.1.x,XXL-JOB was used by company hiring me,alias Ferrari inner company,the latest version is recommended for new project】**
755
 - 1、simple:support CRUD operation through Web page, simple and one minute to get started;
758
 - 1、simple:support CRUD operation through Web page, simple and one minute to get started;
756
 - 2、dynamic:support dynamic update task status,pause/recover task and effective in real time;
759
 - 2、dynamic:support dynamic update task status,pause/recover task and effective in real time;
761
 - 7、support for custom parameters;
764
 - 7、support for custom parameters;
762
 - 8、Support pause task execution remotely .
765
 - 8、Support pause task execution remotely .
763
 
766
 
764
-#### 6.2 version V1.2.x,New features [2016-01-17]
767
+### 6.2 version V1.2.x,New features [2016-01-17]
765
 - 1、support task group;
768
 - 1、support task group;
766
 - 2、suport local task, remote task;
769
 - 2、suport local task, remote task;
767
 - 3、support two types underlying communication ,Servlet or JETTY;
770
 - 3、support two types underlying communication ,Servlet or JETTY;
779
 		- High scalability;
782
 		- High scalability;
780
 		- stability;
783
 		- stability;
781
 
784
 
782
-#### 6.3 version V1.3.0,New features [2016-05-19]
785
+### 6.3 version V1.3.0,New features [2016-05-19]
783
 - 1、discard local task module, remote task was recommended, easy to decouple system, the JobHander of task was called executor.
786
 - 1、discard local task module, remote task was recommended, easy to decouple system, the JobHander of task was called executor.
784
 - 2、dicard underlying communication type servlet, JETTY was recommended, schedule and callback bidirectional communication, rebuild the communication logic;
787
 - 2、dicard underlying communication type servlet, JETTY was recommended, schedule and callback bidirectional communication, rebuild the communication logic;
785
 - 3、UI interactive optimization:optimize left menu expansion and menu item selected status , task list opens the table with compression optimization;
788
 - 3、UI interactive optimization:optimize left menu expansion and menu item selected status , task list opens the table with compression optimization;
789
 		- BEAN mode executor:every executor is a Spring Bean instance,it was recognized and scheduled by XXL-JOB through @JobHander annotation;
792
 		- BEAN mode executor:every executor is a Spring Bean instance,it was recognized and scheduled by XXL-JOB through @JobHander annotation;
790
 		 -GLUE mode executor:every executor corresponds to a piece of code,edited and maintained online by Web, Dynamic compile and takes effect in real time, executor is responsible for loading GLUE code and executing;
793
 		 -GLUE mode executor:every executor corresponds to a piece of code,edited and maintained online by Web, Dynamic compile and takes effect in real time, executor is responsible for loading GLUE code and executing;
791
 
794
 
792
-#### 6.4 version V1.3.1,New features [2016-05-23]
795
+### 6.4 version V1.3.1,New features [2016-05-23]
793
 - 1、Update project directory structure:
796
 - 1、Update project directory structure:
794
 	- /xxl-job-admin -------------------- 【schedule center】:Responsible for managing schedule information,send schedule request according to schedule configuration;
797
 	- /xxl-job-admin -------------------- 【schedule center】:Responsible for managing schedule information,send schedule request according to schedule configuration;
795
 	- /xxl-job-core -----------------------  Public core dependence
798
 	- /xxl-job-core -----------------------  Public core dependence
799
 - 2、Upgrade the user manual under the new directory structure;
802
 - 2、Upgrade the user manual under the new directory structure;
800
 - 3、Optimize some interactions and UI;
803
 - 3、Optimize some interactions and UI;
801
 
804
 
802
-#### 6.5 version V1.3.2,New features [2016-05-28]
805
+### 6.5 version V1.3.2,New features [2016-05-28]
803
 - 1、Schedule logic for transactional handle;
806
 - 1、Schedule logic for transactional handle;
804
 - 2、executor asynchronous callback execution log;
807
 - 2、executor asynchronous callback execution log;
805
 - 3、【important】based on HA support of schedule center,extend executor’s Failover support,Support configure multiple execution addresses;
808
 - 3、【important】based on HA support of schedule center,extend executor’s Failover support,Support configure multiple execution addresses;
806
 
809
 
807
-#### 6.6 version V1.4.0 New features [2016-07-24]
810
+### 6.6 version V1.4.0 New features [2016-07-24]
808
 - 1、Task dependency: it is implemented by trigger event, it will automatically trigger a child task schedule after Task execute success and callback, multiple child tasks are separated by commas;
811
 - 1、Task dependency: it is implemented by trigger event, it will automatically trigger a child task schedule after Task execute success and callback, multiple child tasks are separated by commas;
809
 - 2、executor source code has been reconstructed, optimize underlying db script;
812
 - 2、executor source code has been reconstructed, optimize underlying db script;
810
 - 3、optimize task thread group logic of executor, before it is group by executor’s JobHandler so when multiple task reuse Jobhanlder will cause block with each other. Now it is grouped by task of schedule center so tasks are isolated from task execution.
813
 - 3、optimize task thread group logic of executor, before it is group by executor’s JobHandler so when multiple task reuse Jobhanlder will cause block with each other. Now it is grouped by task of schedule center so tasks are isolated from task execution.
823
 
826
 
824
 Tips: V1.3.x release has been published , enter the maintenance phase, branch  address is [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) .New features will be updated continuously in the master branch.
827
 Tips: V1.3.x release has been published , enter the maintenance phase, branch  address is [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) .New features will be updated continuously in the master branch.
825
 
828
 
826
-#### 6.7 version V1.4.1 New features [2016-09-06]
829
+### 6.7 version V1.4.1 New features [2016-09-06]
827
 - 1、project successfully pushed to maven central warehouse, Central warehouse address and dependency  as shown below:
830
 - 1、project successfully pushed to maven central warehouse, Central warehouse address and dependency  as shown below:
828
     ```
831
     ```
829
     <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
832
     <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
841
 - 7、optimize table structure and the table name now is upper case;
844
 - 7、optimize table structure and the table name now is upper case;
842
 - 8、modify ContentType of JSON response from exception handler of schedule center to fix the bug that it is could not recognized by browser.
845
 - 8、modify ContentType of JSON response from exception handler of schedule center to fix the bug that it is could not recognized by browser.
843
 
846
 
844
-#### 6.8 version V1.4.2 New features [2016-09-29]
847
+### 6.8 version V1.4.2 New features [2016-09-29]
845
 - 1、push V1.4.2 to maven central warehouse, main version V1.4 enter maintenance phase;
848
 - 1、push V1.4.2 to maven central warehouse, main version V1.4 enter maintenance phase;
846
 - 2、fix problem task list offset when add task;
849
 - 2、fix problem task list offset when add task;
847
 - 3、fix a style disorder problem that caused by bootstrap does not support the modal frame overlap , the problem occurs when the task is edited;
850
 - 3、fix a style disorder problem that caused by bootstrap does not support the modal frame overlap , the problem occurs when the task is edited;
848
 - 4、optimize schedule status when schedule timeout and Handler could not matched;
851
 - 4、optimize schedule status when schedule timeout and Handler could not matched;
849
 - 5、the task could not stop problem caused by catch exception has given solution;
852
 - 5、the task could not stop problem caused by catch exception has given solution;
850
 
853
 
851
-#### 6.9 version V1.5.0 New features [2016-11-13]
854
+### 6.9 version V1.5.0 New features [2016-11-13]
852
 - 1、task register: executor registers the task automatically, schedule center will automatically discover the registered task and trigger execution.
855
 - 1、task register: executor registers the task automatically, schedule center will automatically discover the registered task and trigger execution.
853
 - 2、add parameter AppName for executor: AppName is the unique identifier of each executor cluster, register periodically and automatically with AppName.
856
 - 2、add parameter AppName for executor: AppName is the unique identifier of each executor cluster, register periodically and automatically with AppName.
854
 - 3、add column executor management in schedule center : manage online executors, automatically discover registered executors via the property AppName。Only managed executors are allowed to be used;
857
 - 3、add column executor management in schedule center : manage online executors, automatically discover registered executors via the property AppName。Only managed executors are allowed to be used;
858
 - 7、adjust table structure, reconstruct the project;
861
 - 7、adjust table structure, reconstruct the project;
859
 - 8、schedule center automatically registered and found, failover: schedule center periodically registered automatically, task callback can recognize all online schedule center addresses, task callback support failover so that it can avoid single point of risk.
862
 - 8、schedule center automatically registered and found, failover: schedule center periodically registered automatically, task callback can recognize all online schedule center addresses, task callback support failover so that it can avoid single point of risk.
860
 
863
 
861
-#### 6.10 version V1.5.1 New features [2016-11-13]
864
+### 6.10 version V1.5.1 New features [2016-11-13]
862
 - 1、Reconstruct the underlying code and optimize logic, clean POM and Clean Code;
865
 - 1、Reconstruct the underlying code and optimize logic, clean POM and Clean Code;
863
 - 2、Servlet/JSP Spec selected 3.0/2.2;
866
 - 2、Servlet/JSP Spec selected 3.0/2.2;
864
 - 3、Spring updated to 3.2.17.RELEASE version;
867
 - 3、Spring updated to 3.2.17.RELEASE version;
865
 - 4、Jetty updated to version 8.2.0.v20160908;
868
 - 4、Jetty updated to version 8.2.0.v20160908;
866
 - 5、has push V1.5.0 and V1.5.1 to maven central warehouse;
869
 - 5、has push V1.5.0 and V1.5.1 to maven central warehouse;
867
 
870
 
868
-#### 6.10 version V1.5.2 New features [2017-02-28]
871
+### 6.10 version V1.5.2 New features [2017-02-28]
869
 - 1、optimize IP tools class which used to gets IP address,IP static cache;
872
 - 1、optimize IP tools class which used to gets IP address,IP static cache;
870
 - 2、both executor and schedule center support customize registered IP address;Solve problem when machine has multiple network card and get the wrong card;
873
 - 2、both executor and schedule center support customize registered IP address;Solve problem when machine has multiple network card and get the wrong card;
871
 - 3、solve the problem that it will generate multiple log files when executed across days;
874
 - 3、solve the problem that it will generate multiple log files when executed across days;
875
 - 7、reconstruct underlying code and optimize logic and Clean Code;
878
 - 7、reconstruct underlying code and optimize logic and Clean Code;
876
 - 8、optimize Dependency Injection Logic of GLUE, support injected as alias;
879
 - 8、optimize Dependency Injection Logic of GLUE, support injected as alias;
877
 
880
 
878
-#### 6.11 version V1.6.0 New features [2017-03-13]
881
+### 6.11 version V1.6.0 New features [2017-03-13]
879
 - 1、upgrade communication scheme,the HEX communication model is adjusted to the B-RPC model based on HTTP;
882
 - 1、upgrade communication scheme,the HEX communication model is adjusted to the B-RPC model based on HTTP;
880
 - 2、executor supports set execution address list manually,provide switch to use automatically registered address or manually set address;
883
 - 2、executor supports set execution address list manually,provide switch to use automatically registered address or manually set address;
881
 - 3、executor route rules:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
884
 - 3、executor route rules:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
886
 - 8、new created task defaults to a non-running state;
889
 - 8、new created task defaults to a non-running state;
887
 - 9、optimize update logic of GLUE mode task instance , The original update is based on the timeout value and now is updated according to the version number,version number plus one while source changed;
890
 - 9、optimize update logic of GLUE mode task instance , The original update is based on the timeout value and now is updated according to the version number,version number plus one while source changed;
888
 
891
 
889
-#### 6.12 version V1.6.1 New features [2017-03-25]
892
+### 6.12 version V1.6.1 New features [2017-03-25]
890
 - 1、Rolling log;
893
 - 1、Rolling log;
891
 - 2、reconstruct WebIDE interactive;
894
 - 2、reconstruct WebIDE interactive;
892
 - 3、enhanced communication check,filter unnormal requests effectively;
895
 - 3、enhanced communication check,filter unnormal requests effectively;
893
 - 4、enhanced permission check,Using dynamic login TOKEN(recommend instead of internal SSO);
896
 - 4、enhanced permission check,Using dynamic login TOKEN(recommend instead of internal SSO);
894
 - 5、optimize database configuration,solve garbled problem;
897
 - 5、optimize database configuration,solve garbled problem;
895
 
898
 
896
-#### 6.13 version V1.6.2 New features [2017-04-25]
899
+### 6.13 version V1.6.2 New features [2017-04-25]
897
 - 1、execution report:support view run time data in real time, such as task number, total schedule number, executor number etc., include schedule report , such as scheduled distribution graph on date, scheduled success distribution graph etc;
900
 - 1、execution report:support view run time data in real time, such as task number, total schedule number, executor number etc., include schedule report , such as scheduled distribution graph on date, scheduled success distribution graph etc;
898
 - 2、JobHandler support set return value for tasks, it is easy to control task execute result in task logic;
901
 - 2、JobHandler support set return value for tasks, it is easy to control task execute result in task logic;
899
 - 3、the problem could not view exception info when resource path include space or chinese word casused resource file could not be loaded;
902
 - 3、the problem could not view exception info when resource path include space or chinese word casused resource file could not be loaded;
900
 - 4、optimize route policy:fix problems that Loop and LFU routing policy counters are no limit and first route is focused on the first machine;
903
 - 4、optimize route policy:fix problems that Loop and LFU routing policy counters are no limit and first route is focused on the first machine;
901
 
904
 
902
-#### 6.14 version V1.7.0 New features [2017-05-02]
905
+### 6.14 version V1.7.0 New features [2017-05-02]
903
 - 1、script task:support develop and run script task by GLUE, include script type such as Shell、Python and Groovy;
906
 - 1、script task:support develop and run script task by GLUE, include script type such as Shell、Python and Groovy;
904
 - 2、add spring-boot type executor example project;
907
 - 2、add spring-boot type executor example project;
905
 - 3、upgrade jetty to version 9.2;
908
 - 3、upgrade jetty to version 9.2;
907
 - 5、executor remove GlueLoader dependency,instead of push mode,thus GLUE source code load no longer rely on JDBC;
910
 - 5、executor remove GlueLoader dependency,instead of push mode,thus GLUE source code load no longer rely on JDBC;
908
 - 6、get the project name when login and redirect, solve 404 problem when it is not deployed by the directory;
911
 - 6、get the project name when login and redirect, solve 404 problem when it is not deployed by the directory;
909
 
912
 
910
-#### 6.15 version V1.7.1 New features [2017-05-08]
913
+### 6.15 version V1.7.1 New features [2017-05-08]
911
 - 1、unified write and read code of execute log as UTF-8,solve log garbled problem under windows environment;
914
 - 1、unified write and read code of execute log as UTF-8,solve log garbled problem under windows environment;
912
 - 2、communication timeout period is limited to 10s,To avoid schedule thread is occupied under abnormal situation;
915
 - 2、communication timeout period is limited to 10s,To avoid schedule thread is occupied under abnormal situation;
913
 - 3、adjust executor , server stat, destroy and register logic;
916
 - 3、adjust executor , server stat, destroy and register logic;
917
 - 7、pop-up component is replaced by layer;
920
 - 7、pop-up component is replaced by layer;
918
 - 8、upgrade quartz to version 2.3.0;
921
 - 8、upgrade quartz to version 2.3.0;
919
 
922
 
920
-#### 6.16 version V1.7.2 New features [2017-05-17]
923
+### 6.16 version V1.7.2 New features [2017-05-17]
921
 - 1、block handle policy:the policy when schedule is too frequently and the executor it too late to handle, include multiple strategies:single machine serially execute(default)、discard subsequent schedule、override before schedule;
924
 - 1、block handle policy:the policy when schedule is too frequently and the executor it too late to handle, include multiple strategies:single machine serially execute(default)、discard subsequent schedule、override before schedule;
922
 - 2、fail handle policy:handle policy when scheduled fail, include :failure alarm(default)、failed to retry;
925
 - 2、fail handle policy:handle policy when scheduled fail, include :failure alarm(default)、failed to retry;
923
 - 3、The communication timeout is adjusted to 180s;
926
 - 3、The communication timeout is adjusted to 180s;
925
 - 5、fix executor parameters lost bug when edit;
928
 - 5、fix executor parameters lost bug when edit;
926
 - 6、add task test Demo to make task logic test easier;
929
 - 6、add task test Demo to make task logic test easier;
927
 
930
 
928
-#### 6.17 version V1.8.0 New features [2017-07-17]
931
+### 6.17 version V1.8.0 New features [2017-07-17]
929
 - 1、optimize update logic of task Cron,instead of rescheduleJob,at the same time preventing set cron repeatedly;
932
 - 1、optimize update logic of task Cron,instead of rescheduleJob,at the same time preventing set cron repeatedly;
930
 - 2、optimize API callback service failed status code,facilitate troubleshooting;
933
 - 2、optimize API callback service failed status code,facilitate troubleshooting;
931
 - 3、XxlJobLogger support multi-parameter;
934
 - 3、XxlJobLogger support multi-parameter;
938
 - 10、supports filter execute log based on running status;
941
 - 10、supports filter execute log based on running status;
939
 - 11、optimize scheduling Center Task Registration Detection Logic;
942
 - 11、optimize scheduling Center Task Registration Detection Logic;
940
 
943
 
941
-#### 6.18 version V1.8.1 New features [2017-07-30]
944
+### 6.18 version V1.8.1 New features [2017-07-30]
942
 - 1、slice broadcast task:When slice broadcast is selected as route policy in executor cluster, one task schedule will broadcast all executor node in cluster to trigger task execute in every executor, pass slice parameter at the same time, so we can develop slice task by slice parameters;
945
 - 1、slice broadcast task:When slice broadcast is selected as route policy in executor cluster, one task schedule will broadcast all executor node in cluster to trigger task execute in every executor, pass slice parameter at the same time, so we can develop slice task by slice parameters;
943
 - 2、dynamic slice: break the task by the dimensions of executor, support dynamic extend executor cluster so that it can add slice number dynamically to do business process, In case of large amount of data process can significantly improve task processing capacity and speed;
946
 - 2、dynamic slice: break the task by the dimensions of executor, support dynamic extend executor cluster so that it can add slice number dynamically to do business process, In case of large amount of data process can significantly improve task processing capacity and speed;
944
 - 3、executor JobHandler disables name conflicts;
947
 - 3、executor JobHandler disables name conflicts;
951
 - 10、upgrade springboot version to 1.5.6.RELEASE of executor;
954
 - 10、upgrade springboot version to 1.5.6.RELEASE of executor;
952
 - 11、unify maven version dependency management;
955
 - 11、unify maven version dependency management;
953
 
956
 
954
-#### 6.19 version V1.8.2 New features[Coding]
957
+### 6.19 version V1.8.2 New features[Coding]
955
 - 1,support configuring the HTTPS for executor callback URL;
958
 - 1,support configuring the HTTPS for executor callback URL;
956
 - 2,Standardize project directory for extend multi executors;
959
 - 2,Standardize project directory for extend multi executors;
957
 - 3,add JFinal type executor sample project;
960
 - 3,add JFinal type executor sample project;
958
 
961
 
959
-#### TODO LIST
962
+### TODO LIST
960
 - 1,Task privilege management:control privilege on executor, check privilege on core operations;
963
 - 1,Task privilege management:control privilege on executor, check privilege on core operations;
961
 - 2,Task slice routing:using consistent Hash algorithm to calculate slice order as stable as possible, even if there is fluctuation in the registration machine will not cause large fluctuations in the order of slice. Currently using IP natural sorting can meet the demand,to be determined;
964
 - 2,Task slice routing:using consistent Hash algorithm to calculate slice order as stable as possible, even if there is fluctuation in the registration machine will not cause large fluctuations in the order of slice. Currently using IP natural sorting can meet the demand,to be determined;
962
 - 3,Failure retry optimization:The current failure to retry logic is execute the request logic once again after the scheduled request fails。The optimization point is retry for both scheduling and execution failures, retry a full schedule when retrying,This may lead schedule failure to an infinite loop,to be determined;
965
 - 3,Failure retry optimization:The current failure to retry logic is execute the request logic once again after the scheduled request fails。The optimization point is retry for both scheduling and execution failures, retry a full schedule when retrying,This may lead schedule failure to an infinite loop,to be determined;
970
 
973
 
971
 ## 7. Other
974
 ## 7. Other
972
 
975
 
973
-#### 7.1 report problem
974
-XXL-JOB project is on Github,If you have any questions, you can ask questions at [ISSUES](https://github.com/xuxueli/xxl-job/issues/) You can also join the above technical exchange group;
976
+### 7.1 Contributing
977
+Contributions are welcome! Open a pull request to fix a bug, or open an [Issue](https://github.com/xuxueli/xxl-job/issues/) to discuss a new feature or change.
975
 
978
 
976
-#### 7.2 used records(record just for spread,Product is open source and free of charge)
979
+### 7.2 used records(record just for spread,Product is open source and free of charge)
977
 Record for spread product and product is free and open source. 
980
 Record for spread product and product is free and open source. 
978
 Welcome to [check in](https://github.com/xuxueli/xxl-job/issues/1 )on github.
981
 Welcome to [check in](https://github.com/xuxueli/xxl-job/issues/1 )on github.
979
 
982
 
980
-#### 7.3 Open source protocol and version
981
-Product is open source and free of charge,will provide free community technical support continuously,Personal or company internal free access and use.
983
+### 7.3 Copyright and License
984
+This product is open source and free, and will continue to provide free community technical support. Individual or enterprise users are free to access and use.
982
 
985
 
983
-XXL-JOB uses GPLv3 protocol to ensure the user's right of free use. The agreement avoids special risk of patent applications "the GPL assures that patents cannot be used to render the program non-free.(From GPLv3)".
984
-Copyright (c) 2015-present, xuxueli.
986
+- Licensed under the GNU General Public License (GPL) v3.
987
+- Copyright (c) 2015-present, xuxueli.
985
 
988
 
986
 ---
989
 ---
987
-#### donation
988
-scan it if want to support project,reward a cup of coffee to author:
990
+### Donate
991
+To support the author, donate the author to buy a cup of coffee:
989
 
992
 
990
 webchat:![输入图片说明](https://static.oschina.net/uploads/img/201707/07214300_qhxT.png "在这里输入图片标题")
993
 webchat:![输入图片说明](https://static.oschina.net/uploads/img/201707/07214300_qhxT.png "在这里输入图片标题")
991
 Alipay:![输入图片说明](http://images2015.cnblogs.com/blog/554415/201605/554415-20160513183306234-1939652116.png "在这里输入图片标题")
994
 Alipay:![输入图片说明](http://images2015.cnblogs.com/blog/554415/201605/554415-20160513183306234-1939652116.png "在这里输入图片标题")

+ 83 - 79
doc/XXL-JOB官方文档.md Ver fichero

1
-# 《分布式任务调度平台XXL-JOB》
1
+## 《分布式任务调度平台XXL-JOB》
2
 
2
 
3
 [![Build Status](https://travis-ci.org/xuxueli/xxl-job.svg?branch=master)](https://travis-ci.org/xuxueli/xxl-job)
3
 [![Build Status](https://travis-ci.org/xuxueli/xxl-job.svg?branch=master)](https://travis-ci.org/xuxueli/xxl-job)
4
 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
4
 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.xuxueli/xxl-job/)
48
 
48
 
49
 于2017-05-13,在上海举办的 "[第62期开源中国源创会](https://www.oschina.net/event/2236961)" 的 "放码过来" 环节,我登台对XXL-JOB做了演讲,台下五百位在场观众反响热烈([图文回顾](https://www.oschina.net/question/2686220_2242120) )。
49
 于2017-05-13,在上海举办的 "[第62期开源中国源创会](https://www.oschina.net/event/2236961)" 的 "放码过来" 环节,我登台对XXL-JOB做了演讲,台下五百位在场观众反响热烈([图文回顾](https://www.oschina.net/question/2686220_2242120) )。
50
 
50
 
51
-#### 我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。
51
+> 我司大众点评目前已接入XXL-JOB,内部别名《Ferrari》(Ferrari基于XXL-JOB的V1.1版本定制而成,新接入应用推荐升级最新版本)。
52
 据最新统计, 自2016-01-21接入至2017-07-07期间,该系统已调度约60万余次,表现优异。新接入应用推荐使用最新版本,因为经过数个大版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。
52
 据最新统计, 自2016-01-21接入至2017-07-07期间,该系统已调度约60万余次,表现优异。新接入应用推荐使用最新版本,因为经过数个大版本的更新,系统的任务模型、UI交互模型以及底层调度通讯模型都有了较大的优化和提升,核心功能更加稳定高效。
53
 
53
 
54
 至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截止2016-07-19为止,XXL-JOB已接入的公司包括不限于:
54
 至今,XXL-JOB已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和大数据作业等,截止2016-07-19为止,XXL-JOB已接入的公司包括不限于:
91
     - 36、增长引擎(北京)信息技术有限公司
91
     - 36、增长引擎(北京)信息技术有限公司
92
 	- ……
92
 	- ……
93
 
93
 
94
+> 更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
95
+
94
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
96
 欢迎大家的关注和使用,XXL-JOB也将拥抱变化,持续发展。
95
 
97
 
98
+
96
 ### 1.4 下载
99
 ### 1.4 下载
97
 
100
 
101
+#### 文档地址
102
+
103
+- [中文文档](http://www.xuxueli.com/xxl-job/)
104
+- [English Documentation](http://www.xuxueli.com/xxl-job/en/)
105
+
98
 #### 源码仓库地址
106
 #### 源码仓库地址
99
 
107
 
100
 源码仓库地址 | Release Download
108
 源码仓库地址 | Release Download
114
 </dependency>
122
 </dependency>
115
 ```
123
 ```
116
 
124
 
117
-#### 博客地址
118
-
119
-- [oschina地址](http://my.oschina.net/xuxueli/blog/690978)
120
-- [cnblogs地址](http://www.cnblogs.com/xuxueli/p/5021979.html)
121
-
122
 #### 技术交流
125
 #### 技术交流
123
 
126
 
124
 - 腾讯QQ群(6):399758605
127
 - 腾讯QQ群(6):399758605
287
 本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。更多有关任务的详细配置,请查看“章节三:任务详解”。
290
 本示例以新建一个 “GLUE模式(Java)” 运行模式的任务为例。更多有关任务的详细配置,请查看“章节三:任务详解”。
288
 ( “GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
291
 ( “GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
289
 
292
 
290
-#### 前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;
293
+> 前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;
291
 
294
 
292
 #### 步骤一:新建任务:
295
 #### 步骤一:新建任务:
293
 登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
296
 登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存。
411
 
414
 
412
 
415
 
413
 ## 四、任务管理
416
 ## 四、任务管理
414
-#### 4.0 配置执行器  
417
+
418
+### 4.0 配置执行器  
415
 点击进入"执行器管理"界面, 如下图:
419
 点击进入"执行器管理"界面, 如下图:
416
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223509_Hr2T.png "在这里输入图片标题")
420
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223509_Hr2T.png "在这里输入图片标题")
417
 
421
 
421
 点击按钮 "+新增执行器" 弹框如下图, 可新增执行器配置:
425
 点击按钮 "+新增执行器" 弹框如下图, 可新增执行器配置:
422
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223617_g3Im.png "在这里输入图片标题")
426
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/12223617_g3Im.png "在这里输入图片标题")
423
 
427
 
424
-#### 执行器属性说明
428
+### 执行器属性说明
425
 
429
 
426
     AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
430
     AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
427
     名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
431
     名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
431
         手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
435
         手动录入:人工手动录入执行器的地址信息,多地址逗号分隔,供调度中心使用;
432
     机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;
436
     机器地址:"注册方式"为"手动录入"时有效,支持人工维护执行器的地址信息;
433
 
437
 
434
-#### 4.1 新建任务
438
+### 4.1 新建任务
435
 进入任务管理界面,点击“新增任务”按钮,在弹出的“新增任务”界面配置任务属性后保存即可。详情页参考章节 "三、任务详解"。
439
 进入任务管理界面,点击“新增任务”按钮,在弹出的“新增任务”界面配置任务属性后保存即可。详情页参考章节 "三、任务详解"。
436
 
440
 
437
-#### 4.2 编辑任务
441
+### 4.2 编辑任务
438
 进入任务管理界面,选中指定任务。点击该任务右侧“编辑”按钮,在弹出的“编辑任务”界面更新任务属性后保存即可,可以修改设置的任务属性信息:
442
 进入任务管理界面,选中指定任务。点击该任务右侧“编辑”按钮,在弹出的“编辑任务”界面更新任务属性后保存即可,可以修改设置的任务属性信息:
439
 
443
 
440
-#### 4.3 编辑GLUE代码
444
+### 4.3 编辑GLUE代码
441
 
445
 
442
 该操作仅针对GLUE任务。
446
 该操作仅针对GLUE任务。
443
 
447
 
444
 选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发。可参考章节 "3.2 GLUE模式(Java)"。
448
 选中指定任务,点击该任务右侧“GLUE”按钮,将会前往GLUE任务的Web IDE界面,在该界面支持对任务代码进行开发。可参考章节 "3.2 GLUE模式(Java)"。
445
 
449
 
446
-#### 4.4 暂停/恢复任务
450
+### 4.4 暂停/恢复任务
447
 可对任务进行“暂停”和“恢复”操作。
451
 可对任务进行“暂停”和“恢复”操作。
448
 需要注意的是,此处的暂停/恢复仅针对任务的后续调度触发行为,不会影响到已经触发的调度任务,如需终止已经触发的调度任务,可查看“4.8 终止运行中的任务”
452
 需要注意的是,此处的暂停/恢复仅针对任务的后续调度触发行为,不会影响到已经触发的调度任务,如需终止已经触发的调度任务,可查看“4.8 终止运行中的任务”
449
 
453
 
450
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24130337_ZAhX.png "在这里输入图片标题")
454
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24130337_ZAhX.png "在这里输入图片标题")
451
 
455
 
452
-#### 4.5 手动触发一次调度
456
+### 4.5 手动触发一次调度
453
 点击“执行”按钮,可手动触发一次任务调度,不影响原有调度规则。
457
 点击“执行”按钮,可手动触发一次任务调度,不影响原有调度规则。
454
 
458
 
455
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133348_Z5wp.png "在这里输入图片标题")
459
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133348_Z5wp.png "在这里输入图片标题")
456
 
460
 
457
-#### 4.6 查看调度日志
461
+### 4.6 查看调度日志
458
 点击“日志”按钮,可以查看任务历史调度日志。在历史调入日志界面可查看每次任务调度的调度结果、执行结果等,点击“执行日志”按钮可查看执行器完整日志。
462
 点击“日志”按钮,可以查看任务历史调度日志。在历史调入日志界面可查看每次任务调度的调度结果、执行结果等,点击“执行日志”按钮可查看执行器完整日志。
459
 
463
 
460
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133500_9235.png "在这里输入图片标题")
464
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24133500_9235.png "在这里输入图片标题")
474
         "执行日志"按钮:点击可查看本地任务执行的详细日志信息;详见“4.7 查看执行日志”;
478
         "执行日志"按钮:点击可查看本地任务执行的详细日志信息;详见“4.7 查看执行日志”;
475
         "终止任务"按钮:点击可终止本地调度对应执行器上本任务的执行线程,包括未执行的阻塞任务一并被终止;
479
         "终止任务"按钮:点击可终止本地调度对应执行器上本任务的执行线程,包括未执行的阻塞任务一并被终止;
476
 
480
 
477
-#### 4.7 查看执行日志
481
+### 4.7 查看执行日志
478
 点击执行日志右侧的 “执行日志” 按钮,可跳转至执行日志界面,可以查看业务代码中打印的完整日志,如下图;
482
 点击执行日志右侧的 “执行日志” 按钮,可跳转至执行日志界面,可以查看业务代码中打印的完整日志,如下图;
479
 
483
 
480
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/25124816_tvGI.png "在这里输入图片标题")
484
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/25124816_tvGI.png "在这里输入图片标题")
481
 
485
 
482
-#### 4.8 终止运行中的任务
486
+### 4.8 终止运行中的任务
483
 仅针对执行中的任务。
487
 仅针对执行中的任务。
484
 在任务日志界面,点击右侧的“终止任务”按钮,将会向本次任务对应的执行器发送任务终止请求,将会终止掉本次任务,同时会清空掉整个任务执行队列。
488
 在任务日志界面,点击右侧的“终止任务”按钮,将会向本次任务对应的执行器发送任务终止请求,将会终止掉本次任务,同时会清空掉整个任务执行队列。
485
 
489
 
502
 而且,在JobHandler中开启子线程时,子线程也不可catch处理"InterruptedException",应该主动向上抛出。
506
 而且,在JobHandler中开启子线程时,子线程也不可catch处理"InterruptedException",应该主动向上抛出。
503
 
507
 
504
 
508
 
505
-#### 4.9 删除执行日志
509
+### 4.9 删除执行日志
506
 在任务日志界面,选中执行器和任务之后,点击右侧的"删除"按钮将会出现"日志清理"弹框,弹框中支持选择不同类型的日志清理策略,选中后点击"确定"按钮即可进行日志清理操作;
510
 在任务日志界面,选中执行器和任务之后,点击右侧的"删除"按钮将会出现"日志清理"弹框,弹框中支持选择不同类型的日志清理策略,选中后点击"确定"按钮即可进行日志清理操作;
507
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08210711_Ypik.png "在这里输入图片标题")
511
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08210711_Ypik.png "在这里输入图片标题")
508
 
512
 
509
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08211152_EB65.png "在这里输入图片标题")
513
 ![输入图片说明](https://static.oschina.net/uploads/img/201705/08211152_EB65.png "在这里输入图片标题")
510
 
514
 
511
-#### 4.10 删除任务
515
+### 4.10 删除任务
512
 点击删除按钮,可以删除对应任务。
516
 点击删除按钮,可以删除对应任务。
513
 
517
 
514
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140641_Z9Qr.png "在这里输入图片标题")
518
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24140641_Z9Qr.png "在这里输入图片标题")
515
 
519
 
520
+
516
 ## 五、总体设计
521
 ## 五、总体设计
517
-#### 5.1 源码目录介绍
522
+### 5.1 源码目录介绍
518
     - /doc :文档资料
523
     - /doc :文档资料
519
     - /db :“调度数据库”建表脚本
524
     - /db :“调度数据库”建表脚本
520
     - /xxl-job-admin :调度中心,项目源码
525
     - /xxl-job-admin :调度中心,项目源码
521
     - /xxl-job-core :公共Jar依赖
526
     - /xxl-job-core :公共Jar依赖
522
     - /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
527
     - /xxl-job-executor-samples :执行器,Sample示例项目(大家可以在该项目上进行开发,也可以将现有项目改造生成执行器项目)
523
 
528
 
524
-#### 5.2 “调度数据库”配置
529
+### 5.2 “调度数据库”配置
525
 XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展而成。
530
 XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展而成。
526
 
531
 
527
 XXL-JOB首先定制了Quartz原生表结构前缀(XXL_JOB_QRTZ_)。
532
 XXL-JOB首先定制了Quartz原生表结构前缀(XXL_JOB_QRTZ_)。
537
 
542
 
538
 因此,XXL-JOB调度数据库共计用于16张数据库表。
543
 因此,XXL-JOB调度数据库共计用于16张数据库表。
539
 
544
 
540
-#### 5.3 架构设计
541
-##### 5.3.1 设计思想
545
+### 5.3 架构设计
546
+#### 5.3.1 设计思想
542
 将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
547
 将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
543
 
548
 
544
 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
549
 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
545
 
550
 
546
 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
551
 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
547
 
552
 
548
-##### 5.3.2 系统组成
553
+#### 5.3.2 系统组成
549
 - **调度模块(调度中心)**:
554
 - **调度模块(调度中心)**:
550
     负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
555
     负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
551
     支持可视化、简单且动态的维管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
556
     支持可视化、简单且动态的维管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
553
     负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
558
     负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
554
     接收“调度中心”的执行请求、终止请求和日志请求等。
559
     接收“调度中心”的执行请求、终止请求和日志请求等。
555
 
560
 
556
-##### 5.3.3 架构图
561
+#### 5.3.3 架构图
557
 
562
 
558
 ![输入图片说明](https://static.oschina.net/uploads/img/201707/17190028_aEE2.png "在这里输入图片标题")
563
 ![输入图片说明](https://static.oschina.net/uploads/img/201707/17190028_aEE2.png "在这里输入图片标题")
559
 
564
 
560
-#### 5.4 调度模块剖析
561
-##### 5.4.1 quartz的不足
565
+### 5.4 调度模块剖析
566
+#### 5.4.1 quartz的不足
562
 Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:
567
 Quartz作为开源作业调度中的佼佼者,是作业调度的首选。但是集群环境中Quartz采用API的方式对任务进行管理,从而可以避免上述问题,但是同样存在以下问题:
563
     - 问题一:调用API的的方式操作任务,不人性化;
568
     - 问题一:调用API的的方式操作任务,不人性化;
564
     - 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
569
     - 问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
565
     - 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况加,此时调度系统的性能将大大受限于业务;
570
     - 问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况加,此时调度系统的性能将大大受限于业务;
566
 XXL-JOB弥补了quartz的上述不足之处。
571
 XXL-JOB弥补了quartz的上述不足之处。
567
 
572
 
568
-##### 5.4.2 RemoteHttpJobBean
573
+#### 5.4.2 RemoteHttpJobBean
569
 常规Quartz的开发,任务逻辑一般维护在QuartzJobBean中,耦合很严重。XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块中的所有调度任务使用同一个QuartzJobBean,即RemoteHttpJobBean。不同的调度任务将各自参数维护在各自扩展表数据中,当触发RemoteHttpJobBean执行时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。
574
 常规Quartz的开发,任务逻辑一般维护在QuartzJobBean中,耦合很严重。XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块中的所有调度任务使用同一个QuartzJobBean,即RemoteHttpJobBean。不同的调度任务将各自参数维护在各自扩展表数据中,当触发RemoteHttpJobBean执行时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。
570
 
575
 
571
 这种调用模型类似RPC调用,RemoteHttpJobBean提供调用代理的功能,而执行器提供远程服务的功能。
576
 这种调用模型类似RPC调用,RemoteHttpJobBean提供调用代理的功能,而执行器提供远程服务的功能。
572
 
577
 
573
-##### 5.4.3 调度中心HA(集群)
578
+#### 5.4.3 调度中心HA(集群)
574
 基于Quartz的集群方案,数据库选用Mysql;集群分布式并发环境中使用QUARTZ定时任务调度,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
579
 基于Quartz的集群方案,数据库选用Mysql;集群分布式并发环境中使用QUARTZ定时任务调度,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。
575
 
580
 
576
 ```
581
 ```
582
 org.quartz.jobStore.clusterCheckinInterval: 1000
587
 org.quartz.jobStore.clusterCheckinInterval: 1000
583
 ```
588
 ```
584
 
589
 
585
-##### 5.4.4 调度线程池
590
+#### 5.4.4 调度线程池
586
 默认线程池中线程的数量为10个,避免单线程因阻塞而引起任务调度延迟。
591
 默认线程池中线程的数量为10个,避免单线程因阻塞而引起任务调度延迟。
587
 
592
 
588
 ```
593
 ```
596
 
601
 
597
 XXL-JOB调度中心中每个JOB逻辑非常 “轻”,单个JOB一次运行平均耗时基本在 "100ms" 之内(基本是网络开销);因此,可以保证使用有限的线程支撑大量的JOB并发运行;上面配置的10个线程至少可以支撑100个JOB正常运行;
602
 XXL-JOB调度中心中每个JOB逻辑非常 “轻”,单个JOB一次运行平均耗时基本在 "100ms" 之内(基本是网络开销);因此,可以保证使用有限的线程支撑大量的JOB并发运行;上面配置的10个线程至少可以支撑100个JOB正常运行;
598
 
603
 
599
-##### 5.4.5 @DisallowConcurrentExecution
604
+#### 5.4.5 @DisallowConcurrentExecution
600
 XXL-JOB调度模块的“调度中心”默认不使用该注解,即默认开启并行机制,因为RemoteHttpJobBean为公共QuartzJobBean,这样在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。
605
 XXL-JOB调度模块的“调度中心”默认不使用该注解,即默认开启并行机制,因为RemoteHttpJobBean为公共QuartzJobBean,这样在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。
601
 
606
 
602
 XXL-JOB的每个调度任务虽然在调度模块是并行调度执行的,但是任务调度传递到任务模块的“执行器”确实串行执行的,同时支持任务终止。
607
 XXL-JOB的每个调度任务虽然在调度模块是并行调度执行的,但是任务调度传递到任务模块的“执行器”确实串行执行的,同时支持任务终止。
603
 
608
 
604
-##### 5.4.6 misfire
609
+#### 5.4.6 misfire
605
 错过了触发时间,处理规则。
610
 错过了触发时间,处理规则。
606
 可能原因:服务重启;调度线程被QuartzJobBean阻塞,线程被耗尽;某个任务启用了@DisallowConcurrentExecution,上次调度持续阻塞,下次调度被错过;
611
 可能原因:服务重启;调度线程被QuartzJobBean阻塞,线程被耗尽;某个任务启用了@DisallowConcurrentExecution,上次调度持续阻塞,下次调度被错过;
607
 
612
 
622
 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
627
 CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
623
 ```
628
 ```
624
 
629
 
625
-##### 5.4.7 日志回调服务
630
+#### 5.4.7 日志回调服务
626
 调度模块的“调度中心”作为Web服务部署时,一方面承担调度中心功能,另一方面也为执行器提供API服务。
631
 调度模块的“调度中心”作为Web服务部署时,一方面承担调度中心功能,另一方面也为执行器提供API服务。
627
 
632
 
628
 调度中心提供的"日志回调服务API服务"代码位置如下:
633
 调度中心提供的"日志回调服务API服务"代码位置如下:
632
 
637
 
633
 “执行器”在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知“调度中心”:
638
 “执行器”在接收到任务执行请求后,执行任务,在执行结束之后会将执行结果回调通知“调度中心”:
634
 
639
 
635
-##### 5.4.8 任务HA(Failover)
640
+#### 5.4.8 任务HA(Failover)
636
 执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。
641
 执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。
637
 
642
 
638
 当任务"路由策略"选择"故障转移(FAILOVER)"时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。
643
 当任务"路由策略"选择"故障转移(FAILOVER)"时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。
644
 “调度备注”可以看出本地调度运行轨迹,执行器的"注册方式"、"地址列表"和任务的"路由策略"。"故障转移(FAILOVER)"路由策略下,调度中心首先对第一个地址进行心跳检测,心跳失败因此自动跳过,第二个依然心跳检测失败……
649
 “调度备注”可以看出本地调度运行轨迹,执行器的"注册方式"、"地址列表"和任务的"路由策略"。"故障转移(FAILOVER)"路由策略下,调度中心首先对第一个地址进行心跳检测,心跳失败因此自动跳过,第二个依然心跳检测失败……
645
 直至心跳检测第三个地址“127.0.0.1:9999”成功,选定为“目标执行器”;然后对“目标执行器”发送调度请求,调度流程结束,等待执行器回调执行结果。
650
 直至心跳检测第三个地址“127.0.0.1:9999”成功,选定为“目标执行器”;然后对“目标执行器”发送调度请求,调度流程结束,等待执行器回调执行结果。
646
 
651
 
647
-##### 5.4.9 调度日志
652
+#### 5.4.9 调度日志
648
 调度中心每次进行任务调度,都会记录一条任务日志,任务日志主要包括以下三部分内容:
653
 调度中心每次进行任务调度,都会记录一条任务日志,任务日志主要包括以下三部分内容:
649
 
654
 
650
 - 任务信息:包括“执行器地址”、“JobHandler”和“执行参数”等属性,根据这些参数,可以精确的定位任务执行的具体机器和任务代码;
655
 - 任务信息:包括“执行器地址”、“JobHandler”和“执行参数”等属性,根据这些参数,可以精确的定位任务执行的具体机器和任务代码;
665
 - 执行备注:执行器,任务执行的备注信息,如异常日志等;
670
 - 执行备注:执行器,任务执行的备注信息,如异常日志等;
666
 - 执行日志:任务执行过程中,业务代码中打印的完整执行日志,见“4.7 查看执行日志”;
671
 - 执行日志:任务执行过程中,业务代码中打印的完整执行日志,见“4.7 查看执行日志”;
667
 
672
 
668
-##### 5.4.10 任务依赖
673
+#### 5.4.10 任务依赖
669
 原理:XXL-JOB中每个任务都对应有一个任务Key,同时,每个任务支持设置属性“子任务Key”,因此,通过“任务Key”可以匹配任务依赖关系。
674
 原理:XXL-JOB中每个任务都对应有一个任务Key,同时,每个任务支持设置属性“子任务Key”,因此,通过“任务Key”可以匹配任务依赖关系。
670
 
675
 
671
 当父任务执行结束并且执行成功时,将会根据“子任务Key”匹配子任务依赖,如果匹配到子任务,将会主动触发一次子任务的执行。
676
 当父任务执行结束并且执行成功时,将会根据“子任务Key”匹配子任务依赖,如果匹配到子任务,将会主动触发一次子任务的执行。
676
 
681
 
677
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
682
 ![输入图片说明](https://static.oschina.net/uploads/img/201607/24194212_jOAU.png "在这里输入图片标题")
678
 
683
 
679
-#### 5.5 任务 "运行模式" 剖析
680
-##### 5.5.1 "Bean模式" 任务
684
+### 5.5 任务 "运行模式" 剖析
685
+#### 5.5.1 "Bean模式" 任务
681
 开发步骤:可参考 "章节三" ;
686
 开发步骤:可参考 "章节三" ;
682
 原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHander(value="名称")”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
687
 原理:每个Bean模式任务都是一个Spring的Bean类实例,它被维护在“执行器”项目的Spring容器中。任务类需要加“@JobHander(value="名称")”注解,因为“执行器”会根据该注解识别Spring容器中的任务。任务类需要继承统一接口“IJobHandler”,任务逻辑在execute方法中开发,因为“执行器”在接收到调度中心的调度请求时,将会调用“IJobHandler”的execute方法,执行任务逻辑。
683
 
688
 
684
-##### 5.5.2 "GLUE模式(Java)" 任务
689
+#### 5.5.2 "GLUE模式(Java)" 任务
685
 开发步骤:可参考 "章节三" ;
690
 开发步骤:可参考 "章节三" ;
686
 原理:每个 "GLUE模式(Java)" 任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
691
 原理:每个 "GLUE模式(Java)" 任务的代码,实际上是“一个继承自“IJobHandler”的实现类的类代码”,“执行器”接收到“调度中心”的调度请求时,会通过Groovy类加载器加载此代码,实例化成Java对象,同时注入此代码中声明的Spring服务(请确保Glue代码中的服务和类引用在“执行器”项目中存在),然后调用该对象的execute方法,执行任务逻辑。
687
 
692
 
695
     - python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "python" 脚本任务;
700
     - python脚本:任务运行模式选择为 "GLUE模式(Python)"时支持 "python" 脚本任务;
696
     
701
     
697
 
702
 
698
-##### 5.5.4 执行器
703
+#### 5.5.4 执行器
699
 执行器实际上是一个内嵌的Jetty服务器,默认端口9999,如下图配置文件所示(参数:xxl.job.executor.port)。
704
 执行器实际上是一个内嵌的Jetty服务器,默认端口9999,如下图配置文件所示(参数:xxl.job.executor.port)。
700
 
705
 
701
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
706
 ![输入图片说明](https://static.oschina.net/uploads/img/201703/10174923_TgNO.png "在这里输入图片标题")
704
 
709
 
705
 “执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
710
 “执行器”接收到“调度中心”的调度请求时,如果任务类型为“Bean模式”,将会匹配Spring容器中的“Bean模式任务”,然后调用其execute方法,执行任务逻辑。如果任务类型为“GLUE模式”,将会加载GLue代码,实例化Java对象,注入依赖的Spring服务(注意:Glue代码中注入的Spring服务,必须存在与该“执行器”项目的Spring容器中),然后调用execute方法,执行任务逻辑。
706
 
711
 
707
-##### 5.5.5 任务日志
712
+#### 5.5.5 任务日志
708
 XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 "XxlJobLogger.log" 打印执行日志,“调度中心”查看执行日志时将会加载对应的日志文件。
713
 XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过 "XxlJobLogger.log" 打印执行日志,“调度中心”查看执行日志时将会加载对应的日志文件。
709
 
714
 
710
 (历史版本通过重写LOG4J的Appender实现,存在依赖限制,该方式在新版本已经被抛弃)
715
 (历史版本通过重写LOG4J的Appender实现,存在依赖限制,该方式在新版本已经被抛弃)
713
 
718
 
714
 在JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。
719
 在JobHandler中开启子线程时,子线程将会将会把日志打印在父线程即JobHandler的执行日志中,方便日志追踪。
715
 
720
 
716
-#### 5.6 通讯模块剖析
721
+### 5.6 通讯模块剖析
717
 
722
 
718
-##### 5.6.1 一次完整的任务调度通讯流程 
723
+#### 5.6.1 一次完整的任务调度通讯流程 
719
     - 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
724
     - 1、“调度中心”向“执行器”发送http调度请求: “执行器”中接收请求的服务,实际上是一台内嵌jetty服务器,默认端口9999;
720
     - 2、“执行器”执行任务逻辑;
725
     - 2、“执行器”执行任务逻辑;
721
     - 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
726
     - 3、“执行器”http回调“调度中心”调度结果: “调度中心”中接收回调的服务,是针对执行器开放一套API服务;
722
 
727
 
723
-##### 5.6.2 通讯数据加密
728
+#### 5.6.2 通讯数据加密
724
 调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
729
 调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;
725
 
730
 
726
-#### 5.7 任务注册, 任务自动发现   
731
+### 5.7 任务注册, 任务自动发现   
727
 自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
732
 自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
728
 
733
 
729
     AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
734
     AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
732
 
737
 
733
 为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
738
 为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
734
 
739
 
735
-#### 5.8 任务执行结果
740
+### 5.8 任务执行结果
736
 自v1.6.2之后,任务执行结果通过 "IJobHandler" 的返回值 "ReturnT" 进行判断;
741
 自v1.6.2之后,任务执行结果通过 "IJobHandler" 的返回值 "ReturnT" 进行判断;
737
 当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
742
 当返回值符合 "ReturnT.code == ReturnT.SUCCESS_CODE" 时表示任务执行成功,否则表示任务执行失败,而且可以通过 "ReturnT.msg" 回调错误信息给调度中心;
738
 从而,在任务逻辑中可以方便的控制任务执行结果;
743
 从而,在任务逻辑中可以方便的控制任务执行结果;
739
 
744
 
740
-#### 5.9 分片广播 & 动态分片   
745
+### 5.9 分片广播 & 动态分片   
741
 执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时传递分片参数;可根据分片参数开发分片任务;
746
 执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时传递分片参数;可根据分片参数开发分片任务;
742
 
747
 
743
 "分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
748
 "分片广播" 以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
755
 - 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍;
760
 - 1、分片任务场景:10个执行器的集群来处理10w条数据,每台机器只需要处理1w条数据,耗时降低10倍;
756
 - 2、广播任务场景:广播执行器机器运行shell脚本、广播集群节点进行缓存更新等
761
 - 2、广播任务场景:广播执行器机器运行shell脚本、广播集群节点进行缓存更新等
757
 
762
 
758
-#### 5、10 访问令牌(AccessToken)
763
+### 5.10 访问令牌(AccessToken)
759
 为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
764
 为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;
760
 
765
 
761
 调度中心和执行器,可通过配置项 "xxl.job.accessToken" 进行AccessToken的设置。
766
 调度中心和执行器,可通过配置项 "xxl.job.accessToken" 进行AccessToken的设置。
767
 
772
 
768
 
773
 
769
 ## 六、版本更新日志
774
 ## 六、版本更新日志
770
-#### 6.1 版本 V1.1.x,新特性[2015-12-05]
775
+### 6.1 版本 V1.1.x,新特性[2015-12-05]
771
 **【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】**
776
 **【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本】**
772
 - 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
777
 - 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
773
 - 2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
778
 - 2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
778
 - 7、支持自定义参数;
783
 - 7、支持自定义参数;
779
 - 8、支持远程任务执行终止;
784
 - 8、支持远程任务执行终止;
780
 
785
 
781
-#### 6.2 版本 V1.2.x,新特性[2016-01-17]
786
+### 6.2 版本 V1.2.x,新特性[2016-01-17]
782
 - 1、支持任务分组;
787
 - 1、支持任务分组;
783
 - 2、支持“本地任务”、“远程任务”;
788
 - 2、支持“本地任务”、“远程任务”;
784
 - 3、底层通讯支持两种方式,Servlet方式 + JETTY方式;
789
 - 3、底层通讯支持两种方式,Servlet方式 + JETTY方式;
796
 		- 高扩展性;
801
 		- 高扩展性;
797
 		- 稳定性;
802
 		- 稳定性;
798
 
803
 
799
-#### 6.3 版本 V1.3.0,新特性[2016-05-19]
804
+### 6.3 版本 V1.3.0,新特性[2016-05-19]
800
 - 1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHander统称为“执行器”;
805
 - 1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHander统称为“执行器”;
801
 - 2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,调度+回调双向通讯,重构通讯逻辑;
806
 - 2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,调度+回调双向通讯,重构通讯逻辑;
802
 - 3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化;
807
 - 3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化;
806
 		- BEAN模式执行器:每个执行器都是Spring的一个Bean实例,XXL-JOB通过注解@JobHander识别和调度执行器;
811
 		- BEAN模式执行器:每个执行器都是Spring的一个Bean实例,XXL-JOB通过注解@JobHander识别和调度执行器;
807
 		 -GLUE模式执行器:每个执行器对应一段代码,在线Web编辑和维护,动态编译生效,执行器负责加载GLUE代码和执行;
812
 		 -GLUE模式执行器:每个执行器对应一段代码,在线Web编辑和维护,动态编译生效,执行器负责加载GLUE代码和执行;
808
 
813
 
809
-#### 6.4 版本 V1.3.1,新特性[2016-05-23]
814
+### 6.4 版本 V1.3.1,新特性[2016-05-23]
810
 - 1、更新项目目录结构:
815
 - 1、更新项目目录结构:
811
 	- /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
816
 	- /xxl-job-admin -------------------- 【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
812
 	- /xxl-job-core ----------------------- 公共依赖
817
 	- /xxl-job-core ----------------------- 公共依赖
816
 - 2、在新的目录结构上,升级了用户手册;
821
 - 2、在新的目录结构上,升级了用户手册;
817
 - 3、优化了一些交互和UI;
822
 - 3、优化了一些交互和UI;
818
 
823
 
819
-#### 6.5 版本 V1.3.2,新特性[2016-05-28]
824
+### 6.5 版本 V1.3.2,新特性[2016-05-28]
820
 - 1、调度逻辑进行事务包裹;
825
 - 1、调度逻辑进行事务包裹;
821
 - 2、执行器异步回调执行日志;
826
 - 2、执行器异步回调执行日志;
822
 - 3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
827
 - 3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
823
 
828
 
824
-#### 6.6 版本 V1.4.0 新特性[2016-07-24]
829
+### 6.6 版本 V1.4.0 新特性[2016-07-24]
825
 - 1、任务依赖: 通过事件触发方式实现, 任务执行成功并回调时会主动触发一次子任务的调度, 多个子任务用逗号分隔;
830
 - 1、任务依赖: 通过事件触发方式实现, 任务执行成功并回调时会主动触发一次子任务的调度, 多个子任务用逗号分隔;
826
 - 2、执行器底层实现代码进行重度重构, 优化底层建表脚本;
831
 - 2、执行器底层实现代码进行重度重构, 优化底层建表脚本;
827
 - 3、执行器中任务线程分组逻辑优化: 之前根据执行器JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞。现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离;
832
 - 3、执行器中任务线程分组逻辑优化: 之前根据执行器JobHandler进行线程分组,当多个任务复用Jobhanlder会导致相互阻塞。现改为根据调度中心任务进行任务线程分组,任务与任务执行相互隔离;
840
 
845
 
841
 Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 。新特性将会在master分支持续更新。
846
 Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段, 地址见分支 [V1.3](https://github.com/xuxueli/xxl-job/tree/v1.3) 。新特性将会在master分支持续更新。
842
 
847
 
843
-#### 6.7 版本 V1.4.1 新特性[2016-09-06]
848
+### 6.7 版本 V1.4.1 新特性[2016-09-06]
844
 - 1、项目成功推送maven中央仓库, 中央仓库地址以及依赖如下: 
849
 - 1、项目成功推送maven中央仓库, 中央仓库地址以及依赖如下: 
845
     ```
850
     ```
846
     <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
851
     <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
858
 - 7、底层表结构,表明统一大写;
863
 - 7、底层表结构,表明统一大写;
859
 - 8、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题;
864
 - 8、调度中心,异常处理器JSON响应的ContentType修改,修复浏览器不识别的问题;
860
 
865
 
861
-#### 6.8 版本 V1.4.2 新特性[2016-09-29]
866
+### 6.8 版本 V1.4.2 新特性[2016-09-29]
862
 - 1、推送新版本 V1.4.2 至中央仓库, 大版本 V1.4 进入维护阶段;
867
 - 1、推送新版本 V1.4.2 至中央仓库, 大版本 V1.4 进入维护阶段;
863
 - 2、任务新增时,任务列表偏移问题修复;
868
 - 2、任务新增时,任务列表偏移问题修复;
864
 - 3、修复一处因bootstrap不支持模态框重叠而导致的样式错乱的问题, 在任务编辑时会出现该问题;
869
 - 3、修复一处因bootstrap不支持模态框重叠而导致的样式错乱的问题, 在任务编辑时会出现该问题;
865
 - 4、调度超时和Handler匹配不到时,调度状态优化;
870
 - 4、调度超时和Handler匹配不到时,调度状态优化;
866
 - 5、因catch异常,导致任务不可终止的问题,给出解决方案, 见文档;
871
 - 5、因catch异常,导致任务不可终止的问题,给出解决方案, 见文档;
867
 
872
 
868
-#### 6.9 版本 V1.5.0 特性[2016-11-13]
873
+### 6.9 版本 V1.5.0 特性[2016-11-13]
869
 - 1、任务注册: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。
874
 - 1、任务注册: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。
870
 - 2、"执行器" 新增参数 "AppName" : 是每个执行器集群的唯一标示AppName, 并周期性以AppName为对象进行自动注册。
875
 - 2、"执行器" 新增参数 "AppName" : 是每个执行器集群的唯一标示AppName, 并周期性以AppName为对象进行自动注册。
871
 - 3、调度中心新增栏目 "执行器管理" : 管理在线的执行器, 通过属性AppName自动发现注册的执行器。只有被管理的执行器才允许被使用;
876
 - 3、调度中心新增栏目 "执行器管理" : 管理在线的执行器, 通过属性AppName自动发现注册的执行器。只有被管理的执行器才允许被使用;
875
 - 7、表结构调整,底层重构优化;
880
 - 7、表结构调整,底层重构优化;
876
 - 8、"调度中心"自动注册和发现,failover: 调度中心周期性自动注册, 任务回调时可以感知在线的所有调度中心地址, 通过failover的方式进行任务回调,避免回调单点风险。
881
 - 8、"调度中心"自动注册和发现,failover: 调度中心周期性自动注册, 任务回调时可以感知在线的所有调度中心地址, 通过failover的方式进行任务回调,避免回调单点风险。
877
 
882
 
878
-#### 6.10 版本 V1.5.1 特性[2016-11-13]
883
+### 6.10 版本 V1.5.1 特性[2016-11-13]
879
 - 1、底层代码重构和逻辑优化,POM清理以及CleanCode;
884
 - 1、底层代码重构和逻辑优化,POM清理以及CleanCode;
880
 - 2、Servlet/JSP Spec设定为3.0/2.2
885
 - 2、Servlet/JSP Spec设定为3.0/2.2
881
 - 3、Spring升级至3.2.17.RELEASE版本;
886
 - 3、Spring升级至3.2.17.RELEASE版本;
882
 - 4、Jetty升级版本至8.2.0.v20160908;
887
 - 4、Jetty升级版本至8.2.0.v20160908;
883
 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
888
 - 5、已推送V1.5.0和V1.5.1至Maven中央仓库;
884
 
889
 
885
-#### 6.10 版本 V1.5.2 特性[2017-02-28]
890
+### 6.10 版本 V1.5.2 特性[2017-02-28]
886
 - 1、IP工具类获取IP逻辑优化,IP静态缓存;
891
 - 1、IP工具类获取IP逻辑优化,IP静态缓存;
887
 - 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
892
 - 2、执行器、调度中心,均支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
888
 - 3、任务跨天执行时生成多份日志文件的问题修复;
893
 - 3、任务跨天执行时生成多份日志文件的问题修复;
892
 - 7、底层代码重构和逻辑优化以及CleanCode;
897
 - 7、底层代码重构和逻辑优化以及CleanCode;
893
 - 8、GLUE依赖注入逻辑优化,支持别名注入;
898
 - 8、GLUE依赖注入逻辑优化,支持别名注入;
894
 
899
 
895
-#### 6.11 版本 V1.6.0 特性[2017-03-13]
900
+### 6.11 版本 V1.6.0 特性[2017-03-13]
896
 - 1、通讯方案升级,原基于HEX的通讯模型调整为基于HTTP的B-RPC的通讯模型;
901
 - 1、通讯方案升级,原基于HEX的通讯模型调整为基于HTTP的B-RPC的通讯模型;
897
 - 2、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
902
 - 2、执行器支持手动设置执行地址列表,提供开关切换使用注册地址还是手动设置的地址;
898
 - 3、执行器路由规则:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
903
 - 3、执行器路由规则:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移;
903
 - 8、新建任务默认为非运行状态;
908
 - 8、新建任务默认为非运行状态;
904
 - 9、GLUE模式任务实例更新逻辑优化,原根据超时时间更新改为根据版本号更新,源码变动版本号加一;
909
 - 9、GLUE模式任务实例更新逻辑优化,原根据超时时间更新改为根据版本号更新,源码变动版本号加一;
905
 
910
 
906
-#### 6.12 版本 V1.6.1 特性[2017-03-25]
911
+### 6.12 版本 V1.6.1 特性[2017-03-25]
907
 - 1、Rolling日志;
912
 - 1、Rolling日志;
908
 - 2、WebIDE交互重构;
913
 - 2、WebIDE交互重构;
909
 - 3、通讯增强校验,有效过滤非正常请求;
914
 - 3、通讯增强校验,有效过滤非正常请求;
910
 - 4、权限增强校验,采用动态登录TOKEN(推荐接入内部SSO);
915
 - 4、权限增强校验,采用动态登录TOKEN(推荐接入内部SSO);
911
 - 5、数据库配置优化,解决乱码问题;
916
 - 5、数据库配置优化,解决乱码问题;
912
 
917
 
913
-#### 6.13 版本 V1.6.2 特性[2017-04-25]
918
+### 6.13 版本 V1.6.2 特性[2017-04-25]
914
 - 1、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
919
 - 1、运行报表:支持实时查看运行数据,如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等;
915
 - 2、JobHandler支持设置任务返回值,在任务逻辑中可以方便的控制任务执行结果;
920
 - 2、JobHandler支持设置任务返回值,在任务逻辑中可以方便的控制任务执行结果;
916
 - 3、资源路径包含空格或中文时资源文件无法加载时,无法准确查看异常信息的问题处理。
921
 - 3、资源路径包含空格或中文时资源文件无法加载时,无法准确查看异常信息的问题处理。
917
 - 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;
922
 - 4、路由策越优化:循环和LFU路由策略计数器自增无上限问题和首次路由压力集中在首台机器的问题修复;
918
 
923
 
919
-#### 6.14 版本 V1.7.0 特性[2017-05-02]
924
+### 6.14 版本 V1.7.0 特性[2017-05-02]
920
 - 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python和Groovy等类型脚本;
925
 - 1、脚本任务:支持以GLUE模式开发和运行脚本任务,包括Shell、Python和Groovy等类型脚本;
921
 - 2、新增spring-boot类型执行器example项目;
926
 - 2、新增spring-boot类型执行器example项目;
922
 - 3、升级jetty版本至9.2;
927
 - 3、升级jetty版本至9.2;
924
 - 5、执行器移除GlueLoader依赖,改为推送方式实现,从而GLUE源码加载不再依赖JDBC;
929
 - 5、执行器移除GlueLoader依赖,改为推送方式实现,从而GLUE源码加载不再依赖JDBC;
925
 - 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
930
 - 6、登录拦截Redirect时获取项目名,解决非根据目录发布时跳转404问题;
926
 
931
 
927
-#### 6.15 版本 V1.7.1 特性[2017-05-08]
932
+### 6.15 版本 V1.7.1 特性[2017-05-08]
928
 - 1、运行日志读写编码统一为UTF-8,解决windows环境下日志乱码问题;
933
 - 1、运行日志读写编码统一为UTF-8,解决windows环境下日志乱码问题;
929
 - 2、通讯超时时间限定为10s,避免异常情况下调度线程占用;
934
 - 2、通讯超时时间限定为10s,避免异常情况下调度线程占用;
930
 - 3、执行器,server启动、销毁和注册逻辑调整;
935
 - 3、执行器,server启动、销毁和注册逻辑调整;
934
 - 7、弹框组件统一替换为layer;
939
 - 7、弹框组件统一替换为layer;
935
 - 8、升级quartz版本至2.3.0;
940
 - 8、升级quartz版本至2.3.0;
936
 
941
 
937
-#### 6.16 版本 V1.7.2 特性[2017-05-17]
942
+### 6.16 版本 V1.7.2 特性[2017-05-17]
938
 - 1、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
943
 - 1、阻塞处理策略:调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
939
 - 2、失败处理策略;调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
944
 - 2、失败处理策略;调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
940
 - 3、通讯时间戳超时时间调整为180s;
945
 - 3、通讯时间戳超时时间调整为180s;
942
 - 5、执行参数编辑时丢失问题修复;
947
 - 5、执行参数编辑时丢失问题修复;
943
 - 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;
948
 - 6、新增任务测试Demo,方便在开发时进行任务逻辑测试;
944
 
949
 
945
-#### 6.17 版本 V1.8.0 特性[2017-07-17]
950
+### 6.17 版本 V1.8.0 特性[2017-07-17]
946
 - 1、任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
951
 - 1、任务Cron更新逻辑优化,改为rescheduleJob,同时防止cron重复设置;
947
 - 2、API回调服务失败状态码优化,方便问题排查;
952
 - 2、API回调服务失败状态码优化,方便问题排查;
948
 - 3、XxlJobLogger的日志多参数支持;
953
 - 3、XxlJobLogger的日志多参数支持;
955
 - 10、执行日志,支持根据运行 "状态" 筛选日志;
960
 - 10、执行日志,支持根据运行 "状态" 筛选日志;
956
 - 11、调度中心任务注册检测逻辑优化;
961
 - 11、调度中心任务注册检测逻辑优化;
957
 
962
 
958
-#### 6.18 版本 V1.8.1 特性[2017-07-30]
963
+### 6.18 版本 V1.8.1 特性[2017-07-30]
959
 - 1、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数处理分片任务;
964
 - 1、分片广播任务:执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数处理分片任务;
960
 - 2、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
965
 - 2、动态分片:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
961
 - 3、执行器JobHandler禁止命名冲突;
966
 - 3、执行器JobHandler禁止命名冲突;
968
 - 10、springboot版本执行器,升级至1.5.6.RELEASE版本;
973
 - 10、springboot版本执行器,升级至1.5.6.RELEASE版本;
969
 - 11、统一maven依赖版本管理;
974
 - 11、统一maven依赖版本管理;
970
 
975
 
971
-#### 6.18 版本 V1.8.2 特性[Coding]
976
+### 6.18 版本 V1.8.2 特性[Coding]
972
 - 1、解决执行器回调URL不支持配置HTTPS时问题;
977
 - 1、解决执行器回调URL不支持配置HTTPS时问题;
973
 - 2、规范项目目录,方便扩展多执行器;
978
 - 2、规范项目目录,方便扩展多执行器;
974
 - 3、新增JFinal类型执行器sample示例项目;
979
 - 3、新增JFinal类型执行器sample示例项目;
975
 
980
 
976
-#### TODO LIST
981
+### TODO LIST
977
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
982
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
978
 - 2、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;
983
 - 2、任务分片路由:分片采用一致性Hash算法计算出尽量稳定的分片顺序,即使注册机器存在波动也不会引起分批分片顺序大的波动;目前采用IP自然排序,可以满足需求,待定;
979
 - 3、失败重试优化:目前失败重试逻辑为,在本次调度请求失败后重新执行一次请求逻辑。优化点为针对调度和执行失败时均做失败重试,重试时重新触发一次完整调度,这将可能导致失败是调度死循环,待定。
984
 - 3、失败重试优化:目前失败重试逻辑为,在本次调度请求失败后重新执行一次请求逻辑。优化点为针对调度和执行失败时均做失败重试,重试时重新触发一次完整调度,这将可能导致失败是调度死循环,待定。
987
 
992
 
988
 ## 七、其他
993
 ## 七、其他
989
 
994
 
990
-#### 7.1 报告问题
991
-XXL-JOB托管在Github上,如有问题可在 [ISSUES](https://github.com/xuxueli/xxl-job/issues/) 上提问,也可以加入上文技术交流群;
995
+### 7.1 项目贡献
996
+欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 [Issue](https://github.com/xuxueli/xxl-job/issues/) 讨论新特性或者变更。
992
 
997
 
993
-#### 7.2 用户接入登记
994
-登记仅为了产品推广,产品开源免费。   
995
-请接入使用的公司或个人进行用户登记 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 。
998
+### 7.2 用户接入登记
999
+更多接入的公司,欢迎在 [登记地址](https://github.com/xuxueli/xxl-job/issues/1 ) 登记,登记仅仅为了产品推广。
996
 
1000
 
997
-#### 7.3 开源协议和版权
1001
+### 7.3 开源协议和版权
998
 产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。
1002
 产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。
999
 
1003
 
1000
-XXL-JOB采用GPLv3协议,目的是为了保证用户的自由使用权利。协议可避免专利申请的特殊危险 "the GPL assures that patents cannot be used to render the program non-free.(摘自GPLv3)"。  
1001
-Copyright (c) 2015-present, xuxueli.
1004
+- Licensed under the GNU General Public License (GPL) v3.
1005
+- Copyright (c) 2015-present, xuxueli.
1002
 
1006
 
1003
 ---
1007
 ---
1004
-#### 捐赠
1008
+### 捐赠
1005
 支持的话可以扫一扫,请作者喝杯咖啡吧:)
1009
 支持的话可以扫一扫,请作者喝杯咖啡吧:)
1006
 
1010
 
1007
 微信:![输入图片说明](https://static.oschina.net/uploads/img/201707/07214300_qhxT.png "在这里输入图片标题")
1011
 微信:![输入图片说明](https://static.oschina.net/uploads/img/201707/07214300_qhxT.png "在这里输入图片标题")

+ 1 - 1
xxl-job-admin/src/main/webapp/WEB-INF/template/help.ftl Ver fichero

36
 					<a target="_blank" href="https://github.com/xuxueli/xxl-job">github</a>&nbsp;&nbsp;&nbsp;&nbsp;
36
 					<a target="_blank" href="https://github.com/xuxueli/xxl-job">github</a>&nbsp;&nbsp;&nbsp;&nbsp;
37
 					<iframe src="https://ghbtns.com/github-btn.html?user=xuxueli&repo=xxl-job&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px" style="margin-bottom:-5px;"></iframe> 
37
 					<iframe src="https://ghbtns.com/github-btn.html?user=xuxueli&repo=xxl-job&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px" style="margin-bottom:-5px;"></iframe> 
38
 					<br><br>
38
 					<br><br>
39
-                    <a target="_blank" href="http://my.oschina.net/xuxueli/blog/690978">oschina(文档中有交流群)</a>
39
+                    <a target="_blank" href="http://www.xuxueli.com/xxl-job/">文档地址</a>
40
                     <br><br>
40
                     <br><br>
41
 
41
 
42
 				</p>
42
 				</p>