From e60fafccc9c9c70de1ce5591d3b652a5ef9fc378 Mon Sep 17 00:00:00 2001
From: wangshaoping
Date: Wed, 21 Feb 2024 18:12:46 +0800
Subject: [PATCH] update
---
app.platform/build.gradle | 2 +
com.xuxueli.xxl-job-admin/build.gradle | 8 -
.../xxl/job/admin/XxlJobAdminApplication.java | 16 -
.../job/admin/controller/IndexController.java | 96 -
.../admin/controller/JobApiController.java | 72 -
.../admin/controller/JobCodeController.java | 96 -
.../admin/controller/JobGroupController.java | 204 -
.../admin/controller/JobInfoController.java | 180 -
.../admin/controller/JobLogController.java | 237 -
.../job/admin/controller/UserController.java | 179 -
.../annotation/PermissionLimit.java | 29 -
.../interceptor/CookieInterceptor.java | 42 -
.../interceptor/PermissionInterceptor.java | 59 -
.../controller/interceptor/WebMvcConfig.java | 28 -
.../resolver/WebExceptionResolver.java | 66 -
.../xxl/job/admin/core/alarm/JobAlarm.java | 20 -
.../xxl/job/admin/core/alarm/JobAlarmer.java | 65 -
.../admin/core/alarm/impl/EmailJobAlarm.java | 118 -
.../admin/core/complete/XxlJobCompleter.java | 99 -
.../admin/core/conf/XxlJobAdminConfig.java | 158 -
.../job/admin/core/cron/CronExpression.java | 1666 ---
.../admin/core/exception/XxlJobException.java | 14 -
.../xxl/job/admin/core/model/XxlJobGroup.java | 77 -
.../xxl/job/admin/core/model/XxlJobInfo.java | 237 -
.../xxl/job/admin/core/model/XxlJobLog.java | 157 -
.../job/admin/core/model/XxlJobLogGlue.java | 75 -
.../job/admin/core/model/XxlJobLogReport.java | 54 -
.../job/admin/core/model/XxlJobRegistry.java | 55 -
.../xxl/job/admin/core/model/XxlJobUser.java | 73 -
.../job/admin/core/old/RemoteHttpJobBean.java | 32 -
.../core/old/XxlJobDynamicScheduler.java | 413 -
.../job/admin/core/old/XxlJobThreadPool.java | 58 -
.../core/route/ExecutorRouteStrategyEnum.java | 48 -
.../job/admin/core/route/ExecutorRouter.java | 24 -
.../route/strategy/ExecutorRouteBusyover.java | 48 -
.../strategy/ExecutorRouteConsistentHash.java | 85 -
.../route/strategy/ExecutorRouteFailover.java | 48 -
.../route/strategy/ExecutorRouteFirst.java | 19 -
.../core/route/strategy/ExecutorRouteLFU.java | 79 -
.../core/route/strategy/ExecutorRouteLRU.java | 76 -
.../route/strategy/ExecutorRouteLast.java | 19 -
.../route/strategy/ExecutorRouteRandom.java | 23 -
.../route/strategy/ExecutorRouteRound.java | 46 -
.../core/scheduler/MisfireStrategyEnum.java | 39 -
.../core/scheduler/ScheduleTypeEnum.java | 46 -
.../admin/core/scheduler/XxlJobScheduler.java | 101 -
.../admin/core/thread/JobCompleteHelper.java | 184 -
.../core/thread/JobFailMonitorHelper.java | 110 -
.../admin/core/thread/JobLogReportHelper.java | 152 -
.../admin/core/thread/JobRegistryHelper.java | 204 -
.../admin/core/thread/JobScheduleHelper.java | 369 -
.../core/thread/JobTriggerPoolHelper.java | 150 -
.../admin/core/trigger/TriggerTypeEnum.java | 27 -
.../job/admin/core/trigger/XxlJobTrigger.java | 226 -
.../xxl/job/admin/core/util/CookieUtil.java | 98 -
.../com/xxl/job/admin/core/util/FtlUtil.java | 31 -
.../com/xxl/job/admin/core/util/I18nUtil.java | 79 -
.../xxl/job/admin/core/util/JacksonUtil.java | 92 -
.../job/admin/core/util/LocalCacheUtil.java | 133 -
.../com/xxl/job/admin/dao/XxlJobGroupDao.java | 37 -
.../com/xxl/job/admin/dao/XxlJobInfoDao.java | 49 -
.../com/xxl/job/admin/dao/XxlJobLogDao.java | 62 -
.../xxl/job/admin/dao/XxlJobLogGlueDao.java | 24 -
.../xxl/job/admin/dao/XxlJobLogReportDao.java | 26 -
.../xxl/job/admin/dao/XxlJobRegistryDao.java | 38 -
.../com/xxl/job/admin/dao/XxlJobUserDao.java | 31 -
.../xxl/job/admin/service/LoginService.java | 107 -
.../xxl/job/admin/service/XxlJobService.java | 86 -
.../job/admin/service/impl/AdminBizImpl.java | 35 -
.../admin/service/impl/XxlJobServiceImpl.java | 434 -
.../src/main/resources/application.properties | 65 -
.../main/resources/i18n/message_en.properties | 276 -
.../resources/i18n/message_zh_CN.properties | 276 -
.../resources/i18n/message_zh_TC.properties | 276 -
.../src/main/resources/logback.xml | 29 -
.../mybatis-mapper/XxlJobGroupMapper.xml | 91 -
.../mybatis-mapper/XxlJobInfoMapper.xml | 240 -
.../mybatis-mapper/XxlJobLogGlueMapper.xml | 71 -
.../mybatis-mapper/XxlJobLogMapper.xml | 273 -
.../mybatis-mapper/XxlJobLogReportMapper.xml | 62 -
.../mybatis-mapper/XxlJobRegistryMapper.xml | 62 -
.../mybatis-mapper/XxlJobUserMapper.xml | 87 -
.../Ionicons/css/ionicons.min.css | 11 -
.../Ionicons/fonts/ionicons.eot | Bin 120724 -> 0 bytes
.../Ionicons/fonts/ionicons.svg | 2230 ----
.../Ionicons/fonts/ionicons.ttf | Bin 188508 -> 0 bytes
.../Ionicons/fonts/ionicons.woff | Bin 67904 -> 0 bytes
.../bower_components/PACE/pace.min.js | 2 -
.../PACE/themes/blue/pace-theme-flash.css | 77 -
.../daterangepicker.css | 269 -
.../daterangepicker.js | 1653 ---
.../bootstrap/css/bootstrap.min.css | 6 -
.../bootstrap/css/bootstrap.min.css.map | 1 -
.../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes
.../fonts/glyphicons-halflings-regular.svg | 288 -
.../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes
.../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes
.../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes
.../bootstrap/js/bootstrap.min.js | 6 -
.../css/dataTables.bootstrap.min.css | 1 -
.../js/dataTables.bootstrap.min.js | 8 -
.../js/jquery.dataTables.min.js | 166 -
.../bower_components/fastclick/fastclick.js | 841 --
.../font-awesome/css/font-awesome.css.map | 7 -
.../font-awesome/css/font-awesome.min.css | 4 -
.../font-awesome/fonts/FontAwesome.otf | Bin 134808 -> 0 bytes
.../fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes
.../fonts/fontawesome-webfont.svg | 2671 -----
.../fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes
.../fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes
.../fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes
.../jquery.slimscroll.min.js | 16 -
.../bower_components/jquery/jquery.min.js | 2 -
.../bower_components/moment/moment.min.js | 1 -
.../adminlte/plugins/iCheck/icheck.min.js | 10 -
.../adminlte/plugins/iCheck/square/blue.css | 62 -
.../adminlte/plugins/iCheck/square/blue.png | Bin 2185 -> 0 bytes
.../plugins/iCheck/square/blue@2x.png | Bin 4485 -> 0 bytes
.../src/main/resources/static/favicon.ico | Bin 4286 -> 0 bytes
.../src/main/resources/static/js/common.1.js | 156 -
.../src/main/resources/static/js/index.js | 207 -
.../resources/static/js/jobcode.index.1.js | 97 -
.../resources/static/js/jobgroup.index.1.js | 359 -
.../resources/static/js/jobinfo.index.1.js | 739 --
.../resources/static/js/joblog.detail.1.js | 89 -
.../resources/static/js/joblog.index.1.js | 396 -
.../src/main/resources/static/js/login.1.js | 66 -
.../main/resources/static/js/user.index.1.js | 328 -
.../codemirror/addon/hint/anyword-hint.js | 41 -
.../codemirror/addon/hint/show-hint.css | 36 -
.../codemirror/addon/hint/show-hint.js | 434 -
.../plugins/codemirror/lib/codemirror.css | 346 -
.../plugins/codemirror/lib/codemirror.js | 9698 -----------------
.../plugins/codemirror/mode/clike/clike.js | 879 --
.../codemirror/mode/javascript/javascript.js | 899 --
.../static/plugins/codemirror/mode/php/php.js | 234 -
.../codemirror/mode/powershell/powershell.js | 398 -
.../plugins/codemirror/mode/python/python.js | 409 -
.../plugins/codemirror/mode/shell/shell.js | 152 -
.../static/plugins/cronGen/cronGen.js | 1106 --
.../static/plugins/cronGen/cronGen_en.js | 1106 --
.../plugins/echarts/echarts.common.min.js | 22 -
.../static/plugins/jquery/jquery.cookie.js | 117 -
.../plugins/jquery/jquery.validate.min.js | 4 -
.../resources/static/plugins/layer/layer.js | 2 -
.../plugins/layer/theme/default/icon-ext.png | Bin 5911 -> 0 bytes
.../plugins/layer/theme/default/icon.png | Bin 11493 -> 0 bytes
.../plugins/layer/theme/default/layer.css | 1 -
.../plugins/layer/theme/default/loading-0.gif | Bin 5793 -> 0 bytes
.../plugins/layer/theme/default/loading-1.gif | Bin 701 -> 0 bytes
.../plugins/layer/theme/default/loading-2.gif | Bin 1787 -> 0 bytes
.../templates/common/common.exception.ftl | 31 -
.../templates/common/common.macro.ftl | 239 -
.../src/main/resources/templates/help.ftl | 47 -
.../src/main/resources/templates/index.ftl | 147 -
.../templates/jobcode/jobcode.index.ftl | 164 -
.../templates/jobgroup/jobgroup.index.ftl | 172 -
.../templates/jobinfo/jobinfo.index.ftl | 540 -
.../templates/joblog/joblog.detail.ftl | 70 -
.../templates/joblog/joblog.index.ftl | 180 -
.../src/main/resources/templates/login.ftl | 45 -
.../resources/templates/user/user.index.ftl | 188 -
com.xuxueli.xxl-job-core/build.gradle | 7 -
.../java/com/xxl/job/core/biz/AdminBiz.java | 48 -
.../com/xxl/job/core/biz/ExecutorBiz.java | 45 -
.../job/core/biz/client/AdminBizClient.java | 50 -
.../core/biz/client/ExecutorBizClient.java | 56 -
.../job/core/biz/impl/ExecutorBizImpl.java | 172 -
.../core/biz/model/HandleCallbackParam.java | 67 -
.../xxl/job/core/biz/model/IdleBeatParam.java | 28 -
.../com/xxl/job/core/biz/model/KillParam.java | 28 -
.../com/xxl/job/core/biz/model/LogParam.java | 47 -
.../com/xxl/job/core/biz/model/LogResult.java | 56 -
.../xxl/job/core/biz/model/RegistryParam.java | 54 -
.../com/xxl/job/core/biz/model/ReturnT.java | 57 -
.../xxl/job/core/biz/model/TriggerParam.java | 144 -
.../xxl/job/core/context/XxlJobContext.java | 122 -
.../xxl/job/core/context/XxlJobHelper.java | 255 -
.../core/enums/ExecutorBlockStrategyEnum.java | 35 -
.../xxl/job/core/enums/RegistryConfig.java | 13 -
.../xxl/job/core/executor/XxlJobExecutor.java | 271 -
.../executor/impl/XxlJobSimpleExecutor.java | 75 -
.../executor/impl/XxlJobSpringExecutor.java | 147 -
.../com/xxl/job/core/glue/GlueFactory.java | 90 -
.../com/xxl/job/core/glue/GlueTypeEnum.java | 53 -
.../job/core/glue/impl/SpringGlueFactory.java | 80 -
.../com/xxl/job/core/handler/IJobHandler.java | 38 -
.../core/handler/annotation/JobHandler.java | 24 -
.../job/core/handler/annotation/XxlJob.java | 30 -
.../job/core/handler/impl/GlueJobHandler.java | 38 -
.../core/handler/impl/MethodJobHandler.java | 53 -
.../core/handler/impl/ScriptJobHandler.java | 93 -
.../xxl/job/core/log/XxlJobFileAppender.java | 220 -
.../com/xxl/job/core/server/EmbedServer.java | 256 -
.../core/thread/ExecutorRegistryThread.java | 129 -
.../core/thread/JobLogFileCleanThread.java | 124 -
.../com/xxl/job/core/thread/JobThread.java | 252 -
.../core/thread/TriggerCallbackThread.java | 260 -
.../java/com/xxl/job/core/util/DateUtil.java | 156 -
.../java/com/xxl/job/core/util/GsonTool.java | 88 -
.../java/com/xxl/job/core/util/IpUtil.java | 203 -
.../xxl/job/core/util/JdkSerializeTool.java | 73 -
.../java/com/xxl/job/core/util/NetUtil.java | 70 -
.../com/xxl/job/core/util/ScriptUtil.java | 228 -
.../com/xxl/job/core/util/ShardingUtil.java | 46 -
.../com/xxl/job/core/util/ThrowableUtil.java | 24 -
.../xxl/job/core/util/XxlJobRemotingUtil.java | 159 -
io.sc.platform.app/build.gradle | 9 +-
.../src/views/Codemirror.vue | 28 +-
.../java/io/sc/platform/jdbc/SqlWhere.java | 25 +
.../platform/jdbc/sql/builder/SqlBuilder.java | 1 +
.../jdbc/sql/builder/SqlWhereBuilder.java | 54 +
.../jdbc/sql/condition/Condition.java | 25 +
io.sc.platform.job.core/build.gradle | 6 -
io.sc.platform.job.executor/build.gradle | 5 -
.../platform/job/executor/util/FileUtil.java | 181 -
.../plugins/application-properties.json | 10 -
.../META-INF/platform/plugins/components.json | 7 -
.../main/resources/META-INF/spring.factories | 3 -
.../src/routes/routes.json | 38 +
io.sc.platform.job.manager/build.gradle | 7 -
.../ExecutorRegistryRepository.java | 13 -
.../repository/TaskLogReportRepository.java | 8 -
.../jpa/repository/TaskRepository.java | 8 -
.../job/manager/service/TaskLogService.java | 12 -
.../META-INF/platform/plugins/components.json | 6 -
.../META-INF/platform/plugins/liquibase.json | 10 -
.../META-INF/platform/plugins/p6spy.json | 5 -
.../platform/plugins/repositories.json | 16 -
.../liquibase/PF_8.0.0_20220606__Job_DDL.xml | 399 -
.../orm/service/impl/DaoServiceImpl.java | 49 +
.../orm/service/support/QueryParameter.java | 2 +
.../service/support/criteria/Criteria.java | 3 +
.../service/support/criteria/impl/And.java | 13 +
.../support/criteria/impl/Between.java | 26 +
.../criteria/impl/BetweenInclusive.java | 25 +
.../support/criteria/impl/Contains.java | 21 +
.../support/criteria/impl/ContainsField.java | 9 +
.../support/criteria/impl/EndWith.java | 7 +
.../support/criteria/impl/EndWithField.java | 7 +
.../service/support/criteria/impl/Equals.java | 27 +
.../support/criteria/impl/EqualsField.java | 8 +
.../criteria/impl/GreaterOrEquals.java | 7 +
.../criteria/impl/GreaterOrEqualsField.java | 8 +
.../support/criteria/impl/GreaterThan.java | 7 +
.../criteria/impl/GreaterThanField.java | 8 +
.../support/criteria/impl/IBetween.java | 7 +
.../criteria/impl/IBetweenInclusive.java | 7 +
.../support/criteria/impl/IContains.java | 21 +
.../support/criteria/impl/IContainsField.java | 7 +
.../support/criteria/impl/IEndWith.java | 7 +
.../support/criteria/impl/IEndWithField.java | 7 +
.../support/criteria/impl/IEquals.java | 21 +
.../support/criteria/impl/IEqualsField.java | 7 +
.../support/criteria/impl/INotContains.java | 7 +
.../criteria/impl/INotContainsField.java | 7 +
.../support/criteria/impl/INotEndWith.java | 7 +
.../criteria/impl/INotEndWithField.java | 7 +
.../support/criteria/impl/INotEquals.java | 7 +
.../criteria/impl/INotEqualsField.java | 7 +
.../support/criteria/impl/INotStartWith.java | 7 +
.../criteria/impl/INotStartWithField.java | 7 +
.../support/criteria/impl/IStartWith.java | 7 +
.../criteria/impl/IStartWithField.java | 7 +
.../service/support/criteria/impl/InSet.java | 8 +
.../support/criteria/impl/IsBlank.java | 8 +
.../support/criteria/impl/IsNotNull.java | 8 +
.../service/support/criteria/impl/IsNull.java | 8 +
.../support/criteria/impl/LessOrEquals.java | 7 +
.../criteria/impl/LessOrEqualsField.java | 8 +
.../support/criteria/impl/LessThan.java | 7 +
.../support/criteria/impl/LessThanField.java | 8 +
.../service/support/criteria/impl/None.java | 8 +
.../service/support/criteria/impl/Not.java | 8 +
.../support/criteria/impl/NotBlank.java | 8 +
.../support/criteria/impl/NotContains.java | 7 +
.../criteria/impl/NotContainsField.java | 8 +
.../support/criteria/impl/NotEndWith.java | 7 +
.../criteria/impl/NotEndWithField.java | 7 +
.../support/criteria/impl/NotEquals.java | 7 +
.../support/criteria/impl/NotEqualsField.java | 8 +
.../support/criteria/impl/NotInSet.java | 8 +
.../support/criteria/impl/NotStartWith.java | 7 +
.../criteria/impl/NotStartWithField.java | 7 +
.../orm/service/support/criteria/impl/Or.java | 8 +
.../support/criteria/impl/StartWith.java | 7 +
.../support/criteria/impl/StartWithField.java | 7 +
.../scheduler}/core/ExecutorRegistry.java | 2 +-
.../sc/platform/scheduler}/core/TaskLog.java | 2 +-
.../scheduler}/core/enums/BlockStrategy.java | 2 +-
.../core/enums/ExecutorAddressType.java | 2 +-
.../core/enums/ExecutorRouteStrategy.java | 2 +-
.../core/enums/ExpirationPolicy.java | 2 +-
.../scheduler}/core/enums/GlueType.java | 2 +-
.../core/enums/TaskScheduleType.java | 2 +-
.../scheduler}/core/enums/TriggerStatus.java | 2 +-
.../core/exception/RcpException.java | 2 +-
.../scheduler}/core/vo/ExecutorVo.java | 4 +-
.../scheduler}/core/vo/TaskLogReportVo.java | 2 +-
.../platform/scheduler}/core/vo/TaskVo.java | 4 +-
.../scheduler}/executor/AdminBiz.java | 2 +-
.../scheduler}/executor/AdminBizClient.java | 4 +-
.../executor/HandleCallbackParam.java | 2 +-
.../scheduler}/executor/JobHandler.java | 2 +-
.../scheduler}/executor/LogResult.java | 2 +-
.../scheduler}/executor/RegistryConfig.java | 2 +-
.../scheduler}/executor/RegistryParam.java | 2 +-
.../platform/scheduler}/executor/ReturnT.java | 2 +-
.../scheduler}/executor/TriggerParam.java | 2 +-
.../scheduler}/executor/XxlJobContext.java | 2 +-
.../scheduler}/executor/XxlJobExecutor.java | 6 +-
.../executor/XxlJobFileAppender.java | 2 +-
.../scheduler}/executor/XxlJobHelper.java | 4 +-
.../client/ExecutorCallbackClient.java | 4 +-
.../client/ExecutorRegistryClient.java | 4 +-
.../impl/ExecutorCallbackClientImpl.java | 6 +-
.../impl/ExecutorRegistryClientImpl.java | 6 +-
.../component/ExecutorInitializer.java | 4 +-
...xecutorConfigurationAutoConfiguration.java | 2 +-
.../executor/configure/ManagerProperties.java | 4 +-
.../controller/ExecutorWebController.java | 6 +-
.../executor/manager/JobHandlerManager.java | 4 +-
.../executor/manager/JobThreadManager.java | 6 +-
.../executor/manager/RegistryManager.java | 4 +-
.../executor/service/ExecutorService.java | 2 +-
.../service/impl/ExecutorServiceImpl.java | 8 +-
.../thread/ExecutorRegistryThread.java | 14 +-
.../thread/JobLogFileCleanThread.java | 6 +-
.../scheduler}/executor/thread/JobThread.java | 6 +-
.../thread/TriggerCallbackThread.java | 4 +-
.../scheduler}/executor/util/DateUtil.java | 2 +-
.../scheduler/executor}/util/FileUtil.java | 2 +-
.../executor/util/XxlJobRemotingUtil.java | 4 +-
.../src/views/scheduler/Executor.vue | 52 +
.../src/views/scheduler/Log.vue | 2 +
.../src/views/scheduler/Report.vue | 181 +
.../src/views/scheduler/Task.vue | 2 +
.../ExecutorCallbackWebController.java | 10 +-
.../ExecutorRegistryWebController.java | 10 +-
.../manager/jpa/entity/ExecutorEntity.java | 6 +-
.../jpa/entity/ExecutorRegistryEntity.java | 4 +-
.../manager/jpa/entity/TaskEntity.java | 6 +-
.../manager/jpa/entity/TaskLogEntity.java | 4 +-
.../jpa/entity/TaskLogReportEntity.java | 4 +-
.../ExecutorRegistryRepository.java | 13 +
.../jpa/repository/ExecutorRepository.java | 6 +-
.../repository/TaskLogReportRepository.java | 8 +
.../jpa/repository/TaskLogRepository.java | 4 +-
.../jpa/repository/TaskRepository.java | 8 +
.../service/ExecutorRegistryService.java | 8 +-
.../manager/service/JobService.java | 6 +-
.../manager/service/TaskLogService.java | 12 +
.../impl/ExecutorRegistryServiceImpl.java | 10 +-
.../manager/service/impl/JobServiceImpl.java | 10 +-
.../service/impl/TaskLogServiceImpl.java | 18 +-
settings.gradle | 13 +-
356 files changed, 1149 insertions(+), 43859 deletions(-)
delete mode 100644 com.xuxueli.xxl-job-admin/build.gradle
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobCodeController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/UserController.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/annotation/PermissionLimit.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/JobAlarm.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/JobAlarmer.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/alarm/impl/EmailJobAlarm.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/complete/XxlJobCompleter.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/cron/CronExpression.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/MisfireStrategyEnum.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/ScheduleTypeEnum.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/application.properties
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_en.properties
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
delete mode 100755 com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/logback.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobGroupMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobInfoMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogGlueMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobLogReportMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobUserMapper.xml
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/css/ionicons.min.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.eot
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.svg
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.ttf
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/Ionicons/fonts/ionicons.woff
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/PACE/pace.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap-daterangepicker/daterangepicker.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/css/bootstrap.min.css.map
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.svg
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff2
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/bootstrap/js/bootstrap.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/datatables.net/js/jquery.dataTables.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/fastclick/fastclick.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.css.map
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/css/font-awesome.min.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/FontAwesome.otf
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.eot
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.svg
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.ttf
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/font-awesome/fonts/fontawesome-webfont.woff2
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/jquery/jquery.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/bower_components/moment/moment.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/favicon.ico
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/common.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/index.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/jobcode.index.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/jobgroup.index.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/jobinfo.index.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/joblog.detail.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/joblog.index.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/login.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/js/user.index.1.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/anyword-hint.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/addon/hint/show-hint.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/lib/codemirror.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/clike/clike.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/javascript/javascript.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/php/php.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/powershell/powershell.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/python/python.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/codemirror/mode/shell/shell.js
delete mode 100755 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/cronGen/cronGen.js
delete mode 100755 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/cronGen/cronGen_en.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/echarts/echarts.common.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/jquery/jquery.cookie.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/jquery/jquery.validate.min.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/layer.js
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/icon-ext.png
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/icon.png
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/layer.css
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/loading-0.gif
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/loading-1.gif
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/static/plugins/layer/theme/default/loading-2.gif
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/common/common.exception.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/common/common.macro.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/help.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/index.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/joblog/joblog.index.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/login.ftl
delete mode 100644 com.xuxueli.xxl-job-admin/src/main/resources/templates/user/user.index.ftl
delete mode 100644 com.xuxueli.xxl-job-core/build.gradle
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/AdminBiz.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/client/AdminBizClient.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/client/ExecutorBizClient.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/HandleCallbackParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/IdleBeatParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/KillParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/LogParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/LogResult.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/RegistryParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/ReturnT.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/context/XxlJobContext.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/context/XxlJobHelper.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/enums/ExecutorBlockStrategyEnum.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/enums/RegistryConfig.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSimpleExecutor.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/glue/impl/SpringGlueFactory.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/annotation/JobHandler.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/annotation/XxlJob.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/MethodJobHandler.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/DateUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/GsonTool.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/IpUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/JdkSerializeTool.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/NetUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/ScriptUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/ShardingUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/ThrowableUtil.java
delete mode 100644 com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java
create mode 100644 io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/SqlWhere.java
create mode 100644 io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/sql/builder/SqlWhereBuilder.java
create mode 100644 io.sc.platform.jdbc/src/main/java/io/sc/platform/jdbc/sql/condition/Condition.java
delete mode 100644 io.sc.platform.job.core/build.gradle
delete mode 100644 io.sc.platform.job.executor/build.gradle
delete mode 100644 io.sc.platform.job.executor/src/main/java/io/sc/platform/job/executor/util/FileUtil.java
delete mode 100644 io.sc.platform.job.executor/src/main/resources/META-INF/platform/plugins/application-properties.json
delete mode 100644 io.sc.platform.job.executor/src/main/resources/META-INF/platform/plugins/components.json
delete mode 100644 io.sc.platform.job.executor/src/main/resources/META-INF/spring.factories
create mode 100644 io.sc.platform.job.manager.frontend/src/routes/routes.json
delete mode 100644 io.sc.platform.job.manager/build.gradle
delete mode 100644 io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/ExecutorRegistryRepository.java
delete mode 100644 io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/TaskLogReportRepository.java
delete mode 100644 io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/jpa/repository/TaskRepository.java
delete mode 100644 io.sc.platform.job.manager/src/main/java/io/sc/platform/job/manager/service/TaskLogService.java
delete mode 100644 io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/components.json
delete mode 100644 io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/liquibase.json
delete mode 100644 io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/p6spy.json
delete mode 100644 io.sc.platform.job.manager/src/main/resources/META-INF/platform/plugins/repositories.json
delete mode 100644 io.sc.platform.job.manager/src/main/resources/liquibase/PF_8.0.0_20220606__Job_DDL.xml
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/ExecutorRegistry.java (97%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/TaskLog.java (98%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/BlockStrategy.java (78%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/ExecutorAddressType.java (69%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/ExecutorRouteStrategy.java (91%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/ExpirationPolicy.java (69%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/GlueType.java (83%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/TaskScheduleType.java (70%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/enums/TriggerStatus.java (65%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/exception/RcpException.java (91%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/vo/ExecutorVo.java (92%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/vo/TaskLogReportVo.java (96%)
rename {io.sc.platform.job.core/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.core/src/main/java/io/sc/platform/scheduler}/core/vo/TaskVo.java (98%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/AdminBiz.java (94%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/AdminBizClient.java (91%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/HandleCallbackParam.java (97%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/JobHandler.java (80%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/LogResult.java (96%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/RegistryConfig.java (84%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/RegistryParam.java (96%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/ReturnT.java (96%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/TriggerParam.java (98%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/XxlJobContext.java (97%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/XxlJobExecutor.java (93%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/XxlJobFileAppender.java (99%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/XxlJobHelper.java (98%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/client/ExecutorCallbackClient.java (51%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/client/ExecutorRegistryClient.java (65%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/client/impl/ExecutorCallbackClientImpl.java (84%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/client/impl/ExecutorRegistryClientImpl.java (88%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/component/ExecutorInitializer.java (94%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/configure/ExecutorConfigurationAutoConfiguration.java (83%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/configure/ManagerProperties.java (77%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/controller/ExecutorWebController.java (81%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/manager/JobHandlerManager.java (87%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/manager/JobThreadManager.java (89%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/manager/RegistryManager.java (74%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/service/ExecutorService.java (82%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/service/impl/ExecutorServiceImpl.java (78%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/thread/ExecutorRegistryThread.java (83%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/thread/JobLogFileCleanThread.java (96%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/thread/JobThread.java (97%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/thread/TriggerCallbackThread.java (98%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/util/DateUtil.java (98%)
rename {com.xuxueli.xxl-job-core/src/main/java/com/xxl/job/core => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler/executor}/util/FileUtil.java (98%)
rename {io.sc.platform.job.executor/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.executor/src/main/java/io/sc/platform/scheduler}/executor/util/XxlJobRemotingUtil.java (98%)
create mode 100644 io.sc.platform.scheduler.manager.frontend/src/views/scheduler/Executor.vue
create mode 100644 io.sc.platform.scheduler.manager.frontend/src/views/scheduler/Log.vue
create mode 100644 io.sc.platform.scheduler.manager.frontend/src/views/scheduler/Report.vue
create mode 100644 io.sc.platform.scheduler.manager.frontend/src/views/scheduler/Task.vue
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/controller/ExecutorCallbackWebController.java (68%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/controller/ExecutorRegistryWebController.java (72%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/entity/ExecutorEntity.java (93%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/entity/ExecutorRegistryEntity.java (95%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/entity/TaskEntity.java (97%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/entity/TaskLogEntity.java (98%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/entity/TaskLogReportEntity.java (94%)
create mode 100644 io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler/manager/jpa/repository/ExecutorRegistryRepository.java
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/repository/ExecutorRepository.java (63%)
create mode 100644 io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler/manager/jpa/repository/TaskLogReportRepository.java
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/jpa/repository/TaskLogRepository.java (52%)
create mode 100644 io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler/manager/jpa/repository/TaskRepository.java
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/service/ExecutorRegistryService.java (52%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/service/JobService.java (52%)
create mode 100644 io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler/manager/service/TaskLogService.java
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/service/impl/ExecutorRegistryServiceImpl.java (84%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/service/impl/JobServiceImpl.java (63%)
rename {io.sc.platform.job.manager/src/main/java/io/sc/platform/job => io.sc.platform.scheduler.manager/src/main/java/io/sc/platform/scheduler}/manager/service/impl/TaskLogServiceImpl.java (65%)
diff --git a/app.platform/build.gradle b/app.platform/build.gradle
index 22d89384..00765731 100644
--- a/app.platform/build.gradle
+++ b/app.platform/build.gradle
@@ -18,6 +18,8 @@ dependencies {
project(":io.sc.engine.mv"),
project(":io.sc.engine.mv.frontend"),
project(":io.sc.engine.mv.sample"),
+
+ project(":io.sc.platform.scheduler.manager"),
)
}
diff --git a/com.xuxueli.xxl-job-admin/build.gradle b/com.xuxueli.xxl-job-admin/build.gradle
deleted file mode 100644
index 31bc5048..00000000
--- a/com.xuxueli.xxl-job-admin/build.gradle
+++ /dev/null
@@ -1,8 +0,0 @@
-dependencies {
- api(
- project(":com.xuxueli.xxl-job-core"),
- "org.springframework.boot:spring-boot-starter-mail",
- "org.freemarker:freemarker",
- "org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0",
- )
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
deleted file mode 100644
index fce10a81..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.xxl.job.admin;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-/**
- * @author xuxueli 2018-10-28 00:38:13
- */
-@SpringBootApplication
-public class XxlJobAdminApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(XxlJobAdminApplication.class, args);
- }
-
-}
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
deleted file mode 100644
index a84fb7dd..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/controller/IndexController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.xxl.job.admin.controller;
-
-import com.xxl.job.admin.controller.annotation.PermissionLimit;
-import com.xxl.job.admin.service.LoginService;
-import com.xxl.job.admin.service.XxlJobService;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.beans.propertyeditors.CustomDateEditor;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.view.RedirectView;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
-/**
- * index controller
- * @author xuxueli 2015-12-19 16:13:16
- */
-@Controller
-public class IndexController {
-
- @Resource
- private XxlJobService xxlJobService;
- @Resource
- private LoginService loginService;
-
-
- @RequestMapping("/")
- public String index(Model model) {
-
- Map dashboardMap = xxlJobService.dashboardInfo();
- model.addAllAttributes(dashboardMap);
-
- return "index";
- }
-
- @RequestMapping("/chartInfo")
- @ResponseBody
- public ReturnT
- *
- *
- * @author Sharada Jambula, James House
- * @author Contributions from Mads Henderson
- * @author Refactoring from CronTrigger to CronExpression by Aaron Craven
- *
- * Borrowed from quartz v2.3.1
- *
- */
-public final class CronExpression implements Serializable, Cloneable {
-
- private static final long serialVersionUID = 12423409423L;
-
- protected static final int SECOND = 0;
- protected static final int MINUTE = 1;
- protected static final int HOUR = 2;
- protected static final int DAY_OF_MONTH = 3;
- protected static final int MONTH = 4;
- protected static final int DAY_OF_WEEK = 5;
- protected static final int YEAR = 6;
- protected static final int ALL_SPEC_INT = 99; // '*'
- protected static final int NO_SPEC_INT = 98; // '?'
- protected static final Integer ALL_SPEC = ALL_SPEC_INT;
- protected static final Integer NO_SPEC = NO_SPEC_INT;
-
- protected static final Map monthMap = new HashMap(20);
- protected static final Map dayMap = new HashMap(60);
- static {
- monthMap.put("JAN", 0);
- monthMap.put("FEB", 1);
- monthMap.put("MAR", 2);
- monthMap.put("APR", 3);
- monthMap.put("MAY", 4);
- monthMap.put("JUN", 5);
- monthMap.put("JUL", 6);
- monthMap.put("AUG", 7);
- monthMap.put("SEP", 8);
- monthMap.put("OCT", 9);
- monthMap.put("NOV", 10);
- monthMap.put("DEC", 11);
-
- dayMap.put("SUN", 1);
- dayMap.put("MON", 2);
- dayMap.put("TUE", 3);
- dayMap.put("WED", 4);
- dayMap.put("THU", 5);
- dayMap.put("FRI", 6);
- dayMap.put("SAT", 7);
- }
-
- private final String cronExpression;
- private TimeZone timeZone = null;
- protected transient TreeSet seconds;
- protected transient TreeSet minutes;
- protected transient TreeSet hours;
- protected transient TreeSet daysOfMonth;
- protected transient TreeSet months;
- protected transient TreeSet daysOfWeek;
- protected transient TreeSet years;
-
- protected transient boolean lastdayOfWeek = false;
- protected transient int nthdayOfWeek = 0;
- protected transient boolean lastdayOfMonth = false;
- protected transient boolean nearestWeekday = false;
- protected transient int lastdayOffset = 0;
- protected transient boolean expressionParsed = false;
-
- public static final int MAX_YEAR = Calendar.getInstance().get(Calendar.YEAR) + 100;
-
- /**
- * Constructs a new CronExpression
based on the specified
- * parameter.
- *
- * @param cronExpression String representation of the cron expression the
- * new object should represent
- * @throws java.text.ParseException
- * if the string expression cannot be parsed into a valid
- * CronExpression
- */
- public CronExpression(String cronExpression) throws ParseException {
- if (cronExpression == null) {
- throw new IllegalArgumentException("cronExpression cannot be null");
- }
-
- this.cronExpression = cronExpression.toUpperCase(Locale.US);
-
- buildExpression(this.cronExpression);
- }
-
- /**
- * Constructs a new {@code CronExpression} as a copy of an existing
- * instance.
- *
- * @param expression
- * The existing cron expression to be copied
- */
- public CronExpression(CronExpression expression) {
- /*
- * We don't call the other constructor here since we need to swallow the
- * ParseException. We also elide some of the sanity checking as it is
- * not logically trippable.
- */
- this.cronExpression = expression.getCronExpression();
- try {
- buildExpression(cronExpression);
- } catch (ParseException ex) {
- throw new AssertionError();
- }
- if (expression.getTimeZone() != null) {
- setTimeZone((TimeZone) expression.getTimeZone().clone());
- }
- }
-
- /**
- * Indicates whether the given date satisfies the cron expression. Note that
- * milliseconds are ignored, so two Dates falling on different milliseconds
- * of the same second will always have the same result here.
- *
- * @param date the date to evaluate
- * @return a boolean indicating whether the given date satisfies the cron
- * expression
- */
- public boolean isSatisfiedBy(Date date) {
- Calendar testDateCal = Calendar.getInstance(getTimeZone());
- testDateCal.setTime(date);
- testDateCal.set(Calendar.MILLISECOND, 0);
- Date originalDate = testDateCal.getTime();
-
- testDateCal.add(Calendar.SECOND, -1);
-
- Date timeAfter = getTimeAfter(testDateCal.getTime());
-
- return ((timeAfter != null) && (timeAfter.equals(originalDate)));
- }
-
- /**
- * Returns the next date/time after the given date/time which
- * satisfies the cron expression.
- *
- * @param date the date/time at which to begin the search for the next valid
- * date/time
- * @return the next valid date/time
- */
- public Date getNextValidTimeAfter(Date date) {
- return getTimeAfter(date);
- }
-
- /**
- * Returns the next date/time after the given date/time which does
- * not satisfy the expression
- *
- * @param date the date/time at which to begin the search for the next
- * invalid date/time
- * @return the next valid date/time
- */
- public Date getNextInvalidTimeAfter(Date date) {
- long difference = 1000;
-
- //move back to the nearest second so differences will be accurate
- Calendar adjustCal = Calendar.getInstance(getTimeZone());
- adjustCal.setTime(date);
- adjustCal.set(Calendar.MILLISECOND, 0);
- Date lastDate = adjustCal.getTime();
-
- Date newDate;
-
- //FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to this problem. Performance will be very bad here, depending on the cron expression. It is, however A solution.
-
- //keep getting the next included time until it's farther than one second
- // apart. At that point, lastDate is the last valid fire time. We return
- // the second immediately following it.
- while (difference == 1000) {
- newDate = getTimeAfter(lastDate);
- if(newDate == null)
- break;
-
- difference = newDate.getTime() - lastDate.getTime();
-
- if (difference == 1000) {
- lastDate = newDate;
- }
- }
-
- return new Date(lastDate.getTime() + 1000);
- }
-
- /**
- * Returns the time zone for which this CronExpression
- * will be resolved.
- */
- public TimeZone getTimeZone() {
- if (timeZone == null) {
- timeZone = TimeZone.getDefault();
- }
-
- return timeZone;
- }
-
- /**
- * Sets the time zone for which this CronExpression
- * will be resolved.
- */
- public void setTimeZone(TimeZone timeZone) {
- this.timeZone = timeZone;
- }
-
- /**
- * Returns the string representation of the CronExpression
- *
- * @return a string representation of the CronExpression
- */
- @Override
- public String toString() {
- return cronExpression;
- }
-
- /**
- * Indicates whether the specified cron expression can be parsed into a
- * valid cron expression
- *
- * @param cronExpression the expression to evaluate
- * @return a boolean indicating whether the given expression is a valid cron
- * expression
- */
- public static boolean isValidExpression(String cronExpression) {
-
- try {
- new CronExpression(cronExpression);
- } catch (ParseException pe) {
- return false;
- }
-
- return true;
- }
-
- public static void validateExpression(String cronExpression) throws ParseException {
-
- new CronExpression(cronExpression);
- }
-
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Expression Parsing Functions
- //
- ////////////////////////////////////////////////////////////////////////////
-
- protected void buildExpression(String expression) throws ParseException {
- expressionParsed = true;
-
- try {
-
- if (seconds == null) {
- seconds = new TreeSet();
- }
- if (minutes == null) {
- minutes = new TreeSet();
- }
- if (hours == null) {
- hours = new TreeSet();
- }
- if (daysOfMonth == null) {
- daysOfMonth = new TreeSet();
- }
- if (months == null) {
- months = new TreeSet();
- }
- if (daysOfWeek == null) {
- daysOfWeek = new TreeSet();
- }
- if (years == null) {
- years = new TreeSet();
- }
-
- int exprOn = SECOND;
-
- StringTokenizer exprsTok = new StringTokenizer(expression, " \t",
- false);
-
- while (exprsTok.hasMoreTokens() && exprOn <= YEAR) {
- String expr = exprsTok.nextToken().trim();
-
- // throw an exception if L is used with other days of the month
- if(exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
- throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
- }
- // throw an exception if L is used with other days of the week
- if(exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
- throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);
- }
- if(exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') +1) != -1) {
- throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);
- }
-
- StringTokenizer vTok = new StringTokenizer(expr, ",");
- while (vTok.hasMoreTokens()) {
- String v = vTok.nextToken();
- storeExpressionVals(0, v, exprOn);
- }
-
- exprOn++;
- }
-
- if (exprOn <= DAY_OF_WEEK) {
- throw new ParseException("Unexpected end of expression.",
- expression.length());
- }
-
- if (exprOn <= YEAR) {
- storeExpressionVals(0, "*", YEAR);
- }
-
- TreeSet dow = getSet(DAY_OF_WEEK);
- TreeSet dom = getSet(DAY_OF_MONTH);
-
- // Copying the logic from the UnsupportedOperationException below
- boolean dayOfMSpec = !dom.contains(NO_SPEC);
- boolean dayOfWSpec = !dow.contains(NO_SPEC);
-
- if (!dayOfMSpec || dayOfWSpec) {
- if (!dayOfWSpec || dayOfMSpec) {
- throw new ParseException(
- "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0);
- }
- }
- } catch (ParseException pe) {
- throw pe;
- } catch (Exception e) {
- throw new ParseException("Illegal cron expression format ("
- + e.toString() + ")", 0);
- }
- }
-
- protected int storeExpressionVals(int pos, String s, int type)
- throws ParseException {
-
- int incr = 0;
- int i = skipWhiteSpace(pos, s);
- if (i >= s.length()) {
- return i;
- }
- char c = s.charAt(i);
- if ((c >= 'A') && (c <= 'Z') && (!s.equals("L")) && (!s.equals("LW")) && (!s.matches("^L-[0-9]*[W]?"))) {
- String sub = s.substring(i, i + 3);
- int sval = -1;
- int eval = -1;
- if (type == MONTH) {
- sval = getMonthNumber(sub) + 1;
- if (sval <= 0) {
- throw new ParseException("Invalid Month value: '" + sub + "'", i);
- }
- if (s.length() > i + 3) {
- c = s.charAt(i + 3);
- if (c == '-') {
- i += 4;
- sub = s.substring(i, i + 3);
- eval = getMonthNumber(sub) + 1;
- if (eval <= 0) {
- throw new ParseException("Invalid Month value: '" + sub + "'", i);
- }
- }
- }
- } else if (type == DAY_OF_WEEK) {
- sval = getDayOfWeekNumber(sub);
- if (sval < 0) {
- throw new ParseException("Invalid Day-of-Week value: '"
- + sub + "'", i);
- }
- if (s.length() > i + 3) {
- c = s.charAt(i + 3);
- if (c == '-') {
- i += 4;
- sub = s.substring(i, i + 3);
- eval = getDayOfWeekNumber(sub);
- if (eval < 0) {
- throw new ParseException(
- "Invalid Day-of-Week value: '" + sub
- + "'", i);
- }
- } else if (c == '#') {
- try {
- i += 4;
- nthdayOfWeek = Integer.parseInt(s.substring(i));
- if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
- throw new Exception();
- }
- } catch (Exception e) {
- throw new ParseException(
- "A numeric value between 1 and 5 must follow the '#' option",
- i);
- }
- } else if (c == 'L') {
- lastdayOfWeek = true;
- i++;
- }
- }
-
- } else {
- throw new ParseException(
- "Illegal characters for this position: '" + sub + "'",
- i);
- }
- if (eval != -1) {
- incr = 1;
- }
- addToSet(sval, eval, incr, type);
- return (i + 3);
- }
-
- if (c == '?') {
- i++;
- if ((i + 1) < s.length()
- && (s.charAt(i) != ' ' && s.charAt(i + 1) != '\t')) {
- throw new ParseException("Illegal character after '?': "
- + s.charAt(i), i);
- }
- if (type != DAY_OF_WEEK && type != DAY_OF_MONTH) {
- throw new ParseException(
- "'?' can only be specified for Day-of-Month or Day-of-Week.",
- i);
- }
- if (type == DAY_OF_WEEK && !lastdayOfMonth) {
- int val = daysOfMonth.last();
- if (val == NO_SPEC_INT) {
- throw new ParseException(
- "'?' can only be specified for Day-of-Month -OR- Day-of-Week.",
- i);
- }
- }
-
- addToSet(NO_SPEC_INT, -1, 0, type);
- return i;
- }
-
- if (c == '*' || c == '/') {
- if (c == '*' && (i + 1) >= s.length()) {
- addToSet(ALL_SPEC_INT, -1, incr, type);
- return i + 1;
- } else if (c == '/'
- && ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s
- .charAt(i + 1) == '\t')) {
- throw new ParseException("'/' must be followed by an integer.", i);
- } else if (c == '*') {
- i++;
- }
- c = s.charAt(i);
- if (c == '/') { // is an increment specified?
- i++;
- if (i >= s.length()) {
- throw new ParseException("Unexpected end of string.", i);
- }
-
- incr = getNumericValue(s, i);
-
- i++;
- if (incr > 10) {
- i++;
- }
- checkIncrementRange(incr, type, i);
- } else {
- incr = 1;
- }
-
- addToSet(ALL_SPEC_INT, -1, incr, type);
- return i;
- } else if (c == 'L') {
- i++;
- if (type == DAY_OF_MONTH) {
- lastdayOfMonth = true;
- }
- if (type == DAY_OF_WEEK) {
- addToSet(7, 7, 0, type);
- }
- if(type == DAY_OF_MONTH && s.length() > i) {
- c = s.charAt(i);
- if(c == '-') {
- ValueSet vs = getValue(0, s, i+1);
- lastdayOffset = vs.value;
- if(lastdayOffset > 30)
- throw new ParseException("Offset from last day must be <= 30", i+1);
- i = vs.pos;
- }
- if(s.length() > i) {
- c = s.charAt(i);
- if(c == 'W') {
- nearestWeekday = true;
- i++;
- }
- }
- }
- return i;
- } else if (c >= '0' && c <= '9') {
- int val = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- addToSet(val, -1, -1, type);
- } else {
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(val, s, i);
- val = vs.value;
- i = vs.pos;
- }
- i = checkNext(i, s, val, type);
- return i;
- }
- } else {
- throw new ParseException("Unexpected character: " + c, i);
- }
-
- return i;
- }
-
- private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {
- if (incr > 59 && (type == SECOND || type == MINUTE)) {
- throw new ParseException("Increment > 60 : " + incr, idxPos);
- } else if (incr > 23 && (type == HOUR)) {
- throw new ParseException("Increment > 24 : " + incr, idxPos);
- } else if (incr > 31 && (type == DAY_OF_MONTH)) {
- throw new ParseException("Increment > 31 : " + incr, idxPos);
- } else if (incr > 7 && (type == DAY_OF_WEEK)) {
- throw new ParseException("Increment > 7 : " + incr, idxPos);
- } else if (incr > 12 && (type == MONTH)) {
- throw new ParseException("Increment > 12 : " + incr, idxPos);
- }
- }
-
- protected int checkNext(int pos, String s, int val, int type)
- throws ParseException {
-
- int end = -1;
- int i = pos;
-
- if (i >= s.length()) {
- addToSet(val, end, -1, type);
- return i;
- }
-
- char c = s.charAt(pos);
-
- if (c == 'L') {
- if (type == DAY_OF_WEEK) {
- if(val < 1 || val > 7)
- throw new ParseException("Day-of-Week values must be between 1 and 7", -1);
- lastdayOfWeek = true;
- } else {
- throw new ParseException("'L' option is not valid here. (pos=" + i + ")", i);
- }
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == 'W') {
- if (type == DAY_OF_MONTH) {
- nearestWeekday = true;
- } else {
- throw new ParseException("'W' option is not valid here. (pos=" + i + ")", i);
- }
- if(val > 31)
- throw new ParseException("The 'W' option does not make sense with values larger than 31 (max number of days in a month)", i);
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == '#') {
- if (type != DAY_OF_WEEK) {
- throw new ParseException("'#' option is not valid here. (pos=" + i + ")", i);
- }
- i++;
- try {
- nthdayOfWeek = Integer.parseInt(s.substring(i));
- if (nthdayOfWeek < 1 || nthdayOfWeek > 5) {
- throw new Exception();
- }
- } catch (Exception e) {
- throw new ParseException(
- "A numeric value between 1 and 5 must follow the '#' option",
- i);
- }
-
- TreeSet set = getSet(type);
- set.add(val);
- i++;
- return i;
- }
-
- if (c == '-') {
- i++;
- c = s.charAt(i);
- int v = Integer.parseInt(String.valueOf(c));
- end = v;
- i++;
- if (i >= s.length()) {
- addToSet(val, end, 1, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v, s, i);
- end = vs.value;
- i = vs.pos;
- }
- if (i < s.length() && ((c = s.charAt(i)) == '/')) {
- i++;
- c = s.charAt(i);
- int v2 = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- addToSet(val, end, v2, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v2, s, i);
- int v3 = vs.value;
- addToSet(val, end, v3, type);
- i = vs.pos;
- return i;
- } else {
- addToSet(val, end, v2, type);
- return i;
- }
- } else {
- addToSet(val, end, 1, type);
- return i;
- }
- }
-
- if (c == '/') {
- if ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s.charAt(i + 1) == '\t') {
- throw new ParseException("'/' must be followed by an integer.", i);
- }
-
- i++;
- c = s.charAt(i);
- int v2 = Integer.parseInt(String.valueOf(c));
- i++;
- if (i >= s.length()) {
- checkIncrementRange(v2, type, i);
- addToSet(val, end, v2, type);
- return i;
- }
- c = s.charAt(i);
- if (c >= '0' && c <= '9') {
- ValueSet vs = getValue(v2, s, i);
- int v3 = vs.value;
- checkIncrementRange(v3, type, i);
- addToSet(val, end, v3, type);
- i = vs.pos;
- return i;
- } else {
- throw new ParseException("Unexpected character '" + c + "' after '/'", i);
- }
- }
-
- addToSet(val, end, 0, type);
- i++;
- return i;
- }
-
- public String getCronExpression() {
- return cronExpression;
- }
-
- public String getExpressionSummary() {
- StringBuilder buf = new StringBuilder();
-
- buf.append("seconds: ");
- buf.append(getExpressionSetSummary(seconds));
- buf.append("\n");
- buf.append("minutes: ");
- buf.append(getExpressionSetSummary(minutes));
- buf.append("\n");
- buf.append("hours: ");
- buf.append(getExpressionSetSummary(hours));
- buf.append("\n");
- buf.append("daysOfMonth: ");
- buf.append(getExpressionSetSummary(daysOfMonth));
- buf.append("\n");
- buf.append("months: ");
- buf.append(getExpressionSetSummary(months));
- buf.append("\n");
- buf.append("daysOfWeek: ");
- buf.append(getExpressionSetSummary(daysOfWeek));
- buf.append("\n");
- buf.append("lastdayOfWeek: ");
- buf.append(lastdayOfWeek);
- buf.append("\n");
- buf.append("nearestWeekday: ");
- buf.append(nearestWeekday);
- buf.append("\n");
- buf.append("NthDayOfWeek: ");
- buf.append(nthdayOfWeek);
- buf.append("\n");
- buf.append("lastdayOfMonth: ");
- buf.append(lastdayOfMonth);
- buf.append("\n");
- buf.append("years: ");
- buf.append(getExpressionSetSummary(years));
- buf.append("\n");
-
- return buf.toString();
- }
-
- protected String getExpressionSetSummary(java.util.Set set) {
-
- if (set.contains(NO_SPEC)) {
- return "?";
- }
- if (set.contains(ALL_SPEC)) {
- return "*";
- }
-
- StringBuilder buf = new StringBuilder();
-
- Iterator itr = set.iterator();
- boolean first = true;
- while (itr.hasNext()) {
- Integer iVal = itr.next();
- String val = iVal.toString();
- if (!first) {
- buf.append(",");
- }
- buf.append(val);
- first = false;
- }
-
- return buf.toString();
- }
-
- protected String getExpressionSetSummary(java.util.ArrayList list) {
-
- if (list.contains(NO_SPEC)) {
- return "?";
- }
- if (list.contains(ALL_SPEC)) {
- return "*";
- }
-
- StringBuilder buf = new StringBuilder();
-
- Iterator itr = list.iterator();
- boolean first = true;
- while (itr.hasNext()) {
- Integer iVal = itr.next();
- String val = iVal.toString();
- if (!first) {
- buf.append(",");
- }
- buf.append(val);
- first = false;
- }
-
- return buf.toString();
- }
-
- protected int skipWhiteSpace(int i, String s) {
- for (; i < s.length() && (s.charAt(i) == ' ' || s.charAt(i) == '\t'); i++) {
- }
-
- return i;
- }
-
- protected int findNextWhiteSpace(int i, String s) {
- for (; i < s.length() && (s.charAt(i) != ' ' || s.charAt(i) != '\t'); i++) {
- }
-
- return i;
- }
-
- protected void addToSet(int val, int end, int incr, int type)
- throws ParseException {
-
- TreeSet set = getSet(type);
-
- if (type == SECOND || type == MINUTE) {
- if ((val < 0 || val > 59 || end > 59) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Minute and Second values must be between 0 and 59",
- -1);
- }
- } else if (type == HOUR) {
- if ((val < 0 || val > 23 || end > 23) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Hour values must be between 0 and 23", -1);
- }
- } else if (type == DAY_OF_MONTH) {
- if ((val < 1 || val > 31 || end > 31) && (val != ALL_SPEC_INT)
- && (val != NO_SPEC_INT)) {
- throw new ParseException(
- "Day of month values must be between 1 and 31", -1);
- }
- } else if (type == MONTH) {
- if ((val < 1 || val > 12 || end > 12) && (val != ALL_SPEC_INT)) {
- throw new ParseException(
- "Month values must be between 1 and 12", -1);
- }
- } else if (type == DAY_OF_WEEK) {
- if ((val == 0 || val > 7 || end > 7) && (val != ALL_SPEC_INT)
- && (val != NO_SPEC_INT)) {
- throw new ParseException(
- "Day-of-Week values must be between 1 and 7", -1);
- }
- }
-
- if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {
- if (val != -1) {
- set.add(val);
- } else {
- set.add(NO_SPEC);
- }
-
- return;
- }
-
- int startAt = val;
- int stopAt = end;
-
- if (val == ALL_SPEC_INT && incr <= 0) {
- incr = 1;
- set.add(ALL_SPEC); // put in a marker, but also fill values
- }
-
- if (type == SECOND || type == MINUTE) {
- if (stopAt == -1) {
- stopAt = 59;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 0;
- }
- } else if (type == HOUR) {
- if (stopAt == -1) {
- stopAt = 23;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 0;
- }
- } else if (type == DAY_OF_MONTH) {
- if (stopAt == -1) {
- stopAt = 31;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == MONTH) {
- if (stopAt == -1) {
- stopAt = 12;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == DAY_OF_WEEK) {
- if (stopAt == -1) {
- stopAt = 7;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1;
- }
- } else if (type == YEAR) {
- if (stopAt == -1) {
- stopAt = MAX_YEAR;
- }
- if (startAt == -1 || startAt == ALL_SPEC_INT) {
- startAt = 1970;
- }
- }
-
- // if the end of the range is before the start, then we need to overflow into
- // the next day, month etc. This is done by adding the maximum amount for that
- // type, and using modulus max to determine the value being added.
- int max = -1;
- if (stopAt < startAt) {
- switch (type) {
- case SECOND : max = 60; break;
- case MINUTE : max = 60; break;
- case HOUR : max = 24; break;
- case MONTH : max = 12; break;
- case DAY_OF_WEEK : max = 7; break;
- case DAY_OF_MONTH : max = 31; break;
- case YEAR : throw new IllegalArgumentException("Start year must be less than stop year");
- default : throw new IllegalArgumentException("Unexpected type encountered");
- }
- stopAt += max;
- }
-
- for (int i = startAt; i <= stopAt; i += incr) {
- if (max == -1) {
- // ie: there's no max to overflow over
- set.add(i);
- } else {
- // take the modulus to get the real value
- int i2 = i % max;
-
- // 1-indexed ranges should not include 0, and should include their max
- if (i2 == 0 && (type == MONTH || type == DAY_OF_WEEK || type == DAY_OF_MONTH) ) {
- i2 = max;
- }
-
- set.add(i2);
- }
- }
- }
-
- TreeSet getSet(int type) {
- switch (type) {
- case SECOND:
- return seconds;
- case MINUTE:
- return minutes;
- case HOUR:
- return hours;
- case DAY_OF_MONTH:
- return daysOfMonth;
- case MONTH:
- return months;
- case DAY_OF_WEEK:
- return daysOfWeek;
- case YEAR:
- return years;
- default:
- return null;
- }
- }
-
- protected ValueSet getValue(int v, String s, int i) {
- char c = s.charAt(i);
- StringBuilder s1 = new StringBuilder(String.valueOf(v));
- while (c >= '0' && c <= '9') {
- s1.append(c);
- i++;
- if (i >= s.length()) {
- break;
- }
- c = s.charAt(i);
- }
- ValueSet val = new ValueSet();
-
- val.pos = (i < s.length()) ? i : i + 1;
- val.value = Integer.parseInt(s1.toString());
- return val;
- }
-
- protected int getNumericValue(String s, int i) {
- int endOfVal = findNextWhiteSpace(i, s);
- String val = s.substring(i, endOfVal);
- return Integer.parseInt(val);
- }
-
- protected int getMonthNumber(String s) {
- Integer integer = monthMap.get(s);
-
- if (integer == null) {
- return -1;
- }
-
- return integer;
- }
-
- protected int getDayOfWeekNumber(String s) {
- Integer integer = dayMap.get(s);
-
- if (integer == null) {
- return -1;
- }
-
- return integer;
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Computation Functions
- //
- ////////////////////////////////////////////////////////////////////////////
-
- public Date getTimeAfter(Date afterTime) {
-
- // Computation is based on Gregorian year only.
- Calendar cl = new java.util.GregorianCalendar(getTimeZone());
-
- // move ahead one second, since we're computing the time *after* the
- // given time
- afterTime = new Date(afterTime.getTime() + 1000);
- // CronTrigger does not deal with milliseconds
- cl.setTime(afterTime);
- cl.set(Calendar.MILLISECOND, 0);
-
- boolean gotOne = false;
- // loop until we've computed the next time, or we've past the endTime
- while (!gotOne) {
-
- //if (endTime != null && cl.getTime().after(endTime)) return null;
- if(cl.get(Calendar.YEAR) > 2999) { // prevent endless loop...
- return null;
- }
-
- SortedSet st = null;
- int t = 0;
-
- int sec = cl.get(Calendar.SECOND);
- int min = cl.get(Calendar.MINUTE);
-
- // get second.................................................
- st = seconds.tailSet(sec);
- if (st != null && st.size() != 0) {
- sec = st.first();
- } else {
- sec = seconds.first();
- min++;
- cl.set(Calendar.MINUTE, min);
- }
- cl.set(Calendar.SECOND, sec);
-
- min = cl.get(Calendar.MINUTE);
- int hr = cl.get(Calendar.HOUR_OF_DAY);
- t = -1;
-
- // get minute.................................................
- st = minutes.tailSet(min);
- if (st != null && st.size() != 0) {
- t = min;
- min = st.first();
- } else {
- min = minutes.first();
- hr++;
- }
- if (min != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, min);
- setCalendarHour(cl, hr);
- continue;
- }
- cl.set(Calendar.MINUTE, min);
-
- hr = cl.get(Calendar.HOUR_OF_DAY);
- int day = cl.get(Calendar.DAY_OF_MONTH);
- t = -1;
-
- // get hour...................................................
- st = hours.tailSet(hr);
- if (st != null && st.size() != 0) {
- t = hr;
- hr = st.first();
- } else {
- hr = hours.first();
- day++;
- }
- if (hr != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- setCalendarHour(cl, hr);
- continue;
- }
- cl.set(Calendar.HOUR_OF_DAY, hr);
-
- day = cl.get(Calendar.DAY_OF_MONTH);
- int mon = cl.get(Calendar.MONTH) + 1;
- // '+ 1' because calendar is 0-based for this field, and we are
- // 1-based
- t = -1;
- int tmon = mon;
-
- // get day...................................................
- boolean dayOfMSpec = !daysOfMonth.contains(NO_SPEC);
- boolean dayOfWSpec = !daysOfWeek.contains(NO_SPEC);
- if (dayOfMSpec && !dayOfWSpec) { // get day by day of month rule
- st = daysOfMonth.tailSet(day);
- if (lastdayOfMonth) {
- if(!nearestWeekday) {
- t = day;
- day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- day -= lastdayOffset;
- if(t > day) {
- mon++;
- if(mon > 12) {
- mon = 1;
- tmon = 3333; // ensure test of mon != tmon further below fails
- cl.add(Calendar.YEAR, 1);
- }
- day = 1;
- }
- } else {
- t = day;
- day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- day -= lastdayOffset;
-
- java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
- tcal.set(Calendar.SECOND, 0);
- tcal.set(Calendar.MINUTE, 0);
- tcal.set(Calendar.HOUR_OF_DAY, 0);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-
- int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
- if(dow == Calendar.SATURDAY && day == 1) {
- day += 2;
- } else if(dow == Calendar.SATURDAY) {
- day -= 1;
- } else if(dow == Calendar.SUNDAY && day == ldom) {
- day -= 2;
- } else if(dow == Calendar.SUNDAY) {
- day += 1;
- }
-
- tcal.set(Calendar.SECOND, sec);
- tcal.set(Calendar.MINUTE, min);
- tcal.set(Calendar.HOUR_OF_DAY, hr);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- Date nTime = tcal.getTime();
- if(nTime.before(afterTime)) {
- day = 1;
- mon++;
- }
- }
- } else if(nearestWeekday) {
- t = day;
- day = daysOfMonth.first();
-
- java.util.Calendar tcal = java.util.Calendar.getInstance(getTimeZone());
- tcal.set(Calendar.SECOND, 0);
- tcal.set(Calendar.MINUTE, 0);
- tcal.set(Calendar.HOUR_OF_DAY, 0);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));
-
- int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- int dow = tcal.get(Calendar.DAY_OF_WEEK);
-
- if(dow == Calendar.SATURDAY && day == 1) {
- day += 2;
- } else if(dow == Calendar.SATURDAY) {
- day -= 1;
- } else if(dow == Calendar.SUNDAY && day == ldom) {
- day -= 2;
- } else if(dow == Calendar.SUNDAY) {
- day += 1;
- }
-
-
- tcal.set(Calendar.SECOND, sec);
- tcal.set(Calendar.MINUTE, min);
- tcal.set(Calendar.HOUR_OF_DAY, hr);
- tcal.set(Calendar.DAY_OF_MONTH, day);
- tcal.set(Calendar.MONTH, mon - 1);
- Date nTime = tcal.getTime();
- if(nTime.before(afterTime)) {
- day = daysOfMonth.first();
- mon++;
- }
- } else if (st != null && st.size() != 0) {
- t = day;
- day = st.first();
- // make sure we don't over-run a short month, such as february
- int lastDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
- if (day > lastDay) {
- day = daysOfMonth.first();
- mon++;
- }
- } else {
- day = daysOfMonth.first();
- mon++;
- }
-
- if (day != t || mon != tmon) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we
- // are 1-based
- continue;
- }
- } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule
- if (lastdayOfWeek) { // are we looking for the last XXX day of
- // the month?
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- }
- if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
- if (day + daysToAdd > lDay) { // did we already miss the
- // last one?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- }
-
- // find date of last occurrence of this day in this month...
- while ((day + daysToAdd + 7) <= lDay) {
- daysToAdd += 7;
- }
-
- day += daysToAdd;
-
- if (daysToAdd > 0) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' here because we are not promoting the month
- continue;
- }
-
- } else if (nthdayOfWeek != 0) {
- // are we looking for the Nth XXX day in the month?
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- } else if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- boolean dayShifted = false;
- if (daysToAdd > 0) {
- dayShifted = true;
- }
-
- day += daysToAdd;
- int weekOfMonth = day / 7;
- if (day % 7 > 0) {
- weekOfMonth++;
- }
-
- daysToAdd = (nthdayOfWeek - weekOfMonth) * 7;
- day += daysToAdd;
- if (daysToAdd < 0
- || day > getLastDayOfMonth(mon, cl
- .get(Calendar.YEAR))) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- } else if (daysToAdd > 0 || dayShifted) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' here because we are NOT promoting the month
- continue;
- }
- } else {
- int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
- int dow = daysOfWeek.first(); // desired
- // d-o-w
- st = daysOfWeek.tailSet(cDow);
- if (st != null && st.size() > 0) {
- dow = st.first();
- }
-
- int daysToAdd = 0;
- if (cDow < dow) {
- daysToAdd = dow - cDow;
- }
- if (cDow > dow) {
- daysToAdd = dow + (7 - cDow);
- }
-
- int lDay = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));
-
- if (day + daysToAdd > lDay) { // will we pass the end of
- // the month?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon);
- // no '- 1' here because we are promoting the month
- continue;
- } else if (daysToAdd > 0) { // are we swithing days?
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, day + daysToAdd);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field,
- // and we are 1-based
- continue;
- }
- }
- } else { // dayOfWSpec && !dayOfMSpec
- throw new UnsupportedOperationException(
- "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.");
- }
- cl.set(Calendar.DAY_OF_MONTH, day);
-
- mon = cl.get(Calendar.MONTH) + 1;
- // '+ 1' because calendar is 0-based for this field, and we are
- // 1-based
- int year = cl.get(Calendar.YEAR);
- t = -1;
-
- // test for expressions that never generate a valid fire date,
- // but keep looping...
- if (year > MAX_YEAR) {
- return null;
- }
-
- // get month...................................................
- st = months.tailSet(mon);
- if (st != null && st.size() != 0) {
- t = mon;
- mon = st.first();
- } else {
- mon = months.first();
- year++;
- }
- if (mon != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
- cl.set(Calendar.YEAR, year);
- continue;
- }
- cl.set(Calendar.MONTH, mon - 1);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
-
- year = cl.get(Calendar.YEAR);
- t = -1;
-
- // get year...................................................
- st = years.tailSet(year);
- if (st != null && st.size() != 0) {
- t = year;
- year = st.first();
- } else {
- return null; // ran out of years...
- }
-
- if (year != t) {
- cl.set(Calendar.SECOND, 0);
- cl.set(Calendar.MINUTE, 0);
- cl.set(Calendar.HOUR_OF_DAY, 0);
- cl.set(Calendar.DAY_OF_MONTH, 1);
- cl.set(Calendar.MONTH, 0);
- // '- 1' because calendar is 0-based for this field, and we are
- // 1-based
- cl.set(Calendar.YEAR, year);
- continue;
- }
- cl.set(Calendar.YEAR, year);
-
- gotOne = true;
- } // while( !done )
-
- return cl.getTime();
- }
-
- /**
- * Advance the calendar to the particular hour paying particular attention
- * to daylight saving problems.
- *
- * @param cal the calendar to operate on
- * @param hour the hour to set
- */
- protected void setCalendarHour(Calendar cal, int hour) {
- cal.set(java.util.Calendar.HOUR_OF_DAY, hour);
- if (cal.get(java.util.Calendar.HOUR_OF_DAY) != hour && hour != 24) {
- cal.set(java.util.Calendar.HOUR_OF_DAY, hour + 1);
- }
- }
-
- /**
- * NOT YET IMPLEMENTED: Returns the time before the given time
- * that the CronExpression
matches.
- */
- public Date getTimeBefore(Date endTime) {
- // FUTURE_TODO: implement QUARTZ-423
- return null;
- }
-
- /**
- * NOT YET IMPLEMENTED: Returns the final time that the
- * CronExpression
will match.
- */
- public Date getFinalFireTime() {
- // FUTURE_TODO: implement QUARTZ-423
- return null;
- }
-
- protected boolean isLeapYear(int year) {
- return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
- }
-
- protected int getLastDayOfMonth(int monthNum, int year) {
-
- switch (monthNum) {
- case 1:
- return 31;
- case 2:
- return (isLeapYear(year)) ? 29 : 28;
- case 3:
- return 31;
- case 4:
- return 30;
- case 5:
- return 31;
- case 6:
- return 30;
- case 7:
- return 31;
- case 8:
- return 31;
- case 9:
- return 30;
- case 10:
- return 31;
- case 11:
- return 30;
- case 12:
- return 31;
- default:
- throw new IllegalArgumentException("Illegal month number: "
- + monthNum);
- }
- }
-
-
- private void readObject(java.io.ObjectInputStream stream)
- throws java.io.IOException, ClassNotFoundException {
-
- stream.defaultReadObject();
- try {
- buildExpression(cronExpression);
- } catch (Exception ignore) {
- } // never happens
- }
-
- @Override
- @Deprecated
- public Object clone() {
- return new CronExpression(this);
- }
-}
-
-class ValueSet {
- public int value;
-
- public int pos;
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
deleted file mode 100644
index faa6063c..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/exception/XxlJobException.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.xxl.job.admin.core.exception;
-
-/**
- * @author xuxueli 2019-05-04 23:19:29
- */
-public class XxlJobException extends RuntimeException {
-
- public XxlJobException() {
- }
- public XxlJobException(String message) {
- super(message);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
deleted file mode 100644
index dde4b399..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobGroup.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobGroup {
-
- private int id;
- private String appname;
- private String title;
- private int addressType; // 执行器地址类型:0=自动注册、1=手动录入
- private String addressList; // 执行器地址列表,多地址逗号分隔(手动录入)
- private Date updateTime;
-
- // registry list
- private List registryList; // 执行器地址列表(系统注册)
- public List getRegistryList() {
- if (addressList!=null && addressList.trim().length()>0) {
- registryList = new ArrayList(Arrays.asList(addressList.split(",")));
- }
- return registryList;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getAppname() {
- return appname;
- }
-
- public void setAppname(String appname) {
- this.appname = appname;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public int getAddressType() {
- return addressType;
- }
-
- public void setAddressType(int addressType) {
- this.addressType = addressType;
- }
-
- public String getAddressList() {
- return addressList;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-
- public void setAddressList(String addressList) {
- this.addressList = addressList;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
deleted file mode 100644
index e47b6dc6..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobInfo.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job info
- *
- * @author xuxueli 2016-1-12 18:25:49
- */
-public class XxlJobInfo {
-
- private int id; // 主键ID
-
- private int jobGroup; // 执行器主键ID
- private String jobDesc;
-
- private Date addTime;
- private Date updateTime;
-
- private String author; // 负责人
- private String alarmEmail; // 报警邮件
-
- private String scheduleType; // 调度类型
- private String scheduleConf; // 调度配置,值含义取决于调度类型
- private String misfireStrategy; // 调度过期策略
-
- private String executorRouteStrategy; // 执行器路由策略
- private String executorHandler; // 执行器,任务Handler名称
- private String executorParam; // 执行器,任务参数
- private String executorBlockStrategy; // 阻塞处理策略
- private int executorTimeout; // 任务执行超时时间,单位秒
- private int executorFailRetryCount; // 失败重试次数
-
- private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum
- private String glueSource; // GLUE源代码
- private String glueRemark; // GLUE备注
- private Date glueUpdatetime; // GLUE更新时间
-
- private String childJobId; // 子任务ID,多个逗号分隔
-
- private int triggerStatus; // 调度状态:0-停止,1-运行
- private long triggerLastTime; // 上次调度时间
- private long triggerNextTime; // 下次调度时间
-
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getJobGroup() {
- return jobGroup;
- }
-
- public void setJobGroup(int jobGroup) {
- this.jobGroup = jobGroup;
- }
-
- public String getJobDesc() {
- return jobDesc;
- }
-
- public void setJobDesc(String jobDesc) {
- this.jobDesc = jobDesc;
- }
-
- public Date getAddTime() {
- return addTime;
- }
-
- public void setAddTime(Date addTime) {
- this.addTime = addTime;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
- public String getAlarmEmail() {
- return alarmEmail;
- }
-
- public void setAlarmEmail(String alarmEmail) {
- this.alarmEmail = alarmEmail;
- }
-
- public String getScheduleType() {
- return scheduleType;
- }
-
- public void setScheduleType(String scheduleType) {
- this.scheduleType = scheduleType;
- }
-
- public String getScheduleConf() {
- return scheduleConf;
- }
-
- public void setScheduleConf(String scheduleConf) {
- this.scheduleConf = scheduleConf;
- }
-
- public String getMisfireStrategy() {
- return misfireStrategy;
- }
-
- public void setMisfireStrategy(String misfireStrategy) {
- this.misfireStrategy = misfireStrategy;
- }
-
- public String getExecutorRouteStrategy() {
- return executorRouteStrategy;
- }
-
- public void setExecutorRouteStrategy(String executorRouteStrategy) {
- this.executorRouteStrategy = executorRouteStrategy;
- }
-
- public String getExecutorHandler() {
- return executorHandler;
- }
-
- public void setExecutorHandler(String executorHandler) {
- this.executorHandler = executorHandler;
- }
-
- public String getExecutorParam() {
- return executorParam;
- }
-
- public void setExecutorParam(String executorParam) {
- this.executorParam = executorParam;
- }
-
- public String getExecutorBlockStrategy() {
- return executorBlockStrategy;
- }
-
- public void setExecutorBlockStrategy(String executorBlockStrategy) {
- this.executorBlockStrategy = executorBlockStrategy;
- }
-
- public int getExecutorTimeout() {
- return executorTimeout;
- }
-
- public void setExecutorTimeout(int executorTimeout) {
- this.executorTimeout = executorTimeout;
- }
-
- public int getExecutorFailRetryCount() {
- return executorFailRetryCount;
- }
-
- public void setExecutorFailRetryCount(int executorFailRetryCount) {
- this.executorFailRetryCount = executorFailRetryCount;
- }
-
- public String getGlueType() {
- return glueType;
- }
-
- public void setGlueType(String glueType) {
- this.glueType = glueType;
- }
-
- public String getGlueSource() {
- return glueSource;
- }
-
- public void setGlueSource(String glueSource) {
- this.glueSource = glueSource;
- }
-
- public String getGlueRemark() {
- return glueRemark;
- }
-
- public void setGlueRemark(String glueRemark) {
- this.glueRemark = glueRemark;
- }
-
- public Date getGlueUpdatetime() {
- return glueUpdatetime;
- }
-
- public void setGlueUpdatetime(Date glueUpdatetime) {
- this.glueUpdatetime = glueUpdatetime;
- }
-
- public String getChildJobId() {
- return childJobId;
- }
-
- public void setChildJobId(String childJobId) {
- this.childJobId = childJobId;
- }
-
- public int getTriggerStatus() {
- return triggerStatus;
- }
-
- public void setTriggerStatus(int triggerStatus) {
- this.triggerStatus = triggerStatus;
- }
-
- public long getTriggerLastTime() {
- return triggerLastTime;
- }
-
- public void setTriggerLastTime(long triggerLastTime) {
- this.triggerLastTime = triggerLastTime;
- }
-
- public long getTriggerNextTime() {
- return triggerNextTime;
- }
-
- public void setTriggerNextTime(long triggerNextTime) {
- this.triggerNextTime = triggerNextTime;
- }
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
deleted file mode 100644
index 7d3072aa..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLog.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log, used to track trigger process
- * @author xuxueli 2015-12-19 23:19:09
- */
-public class XxlJobLog {
-
- private long id;
-
- // job info
- private int jobGroup;
- private int jobId;
-
- // execute info
- private String executorAddress;
- private String executorHandler;
- private String executorParam;
- private String executorShardingParam;
- private int executorFailRetryCount;
-
- // trigger info
- private Date triggerTime;
- private int triggerCode;
- private String triggerMsg;
-
- // handle info
- private Date handleTime;
- private int handleCode;
- private String handleMsg;
-
- // alarm info
- private int alarmStatus;
-
- public long getId() {
- return id;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public int getJobGroup() {
- return jobGroup;
- }
-
- public void setJobGroup(int jobGroup) {
- this.jobGroup = jobGroup;
- }
-
- public int getJobId() {
- return jobId;
- }
-
- public void setJobId(int jobId) {
- this.jobId = jobId;
- }
-
- public String getExecutorAddress() {
- return executorAddress;
- }
-
- public void setExecutorAddress(String executorAddress) {
- this.executorAddress = executorAddress;
- }
-
- public String getExecutorHandler() {
- return executorHandler;
- }
-
- public void setExecutorHandler(String executorHandler) {
- this.executorHandler = executorHandler;
- }
-
- public String getExecutorParam() {
- return executorParam;
- }
-
- public void setExecutorParam(String executorParam) {
- this.executorParam = executorParam;
- }
-
- public String getExecutorShardingParam() {
- return executorShardingParam;
- }
-
- public void setExecutorShardingParam(String executorShardingParam) {
- this.executorShardingParam = executorShardingParam;
- }
-
- public int getExecutorFailRetryCount() {
- return executorFailRetryCount;
- }
-
- public void setExecutorFailRetryCount(int executorFailRetryCount) {
- this.executorFailRetryCount = executorFailRetryCount;
- }
-
- public Date getTriggerTime() {
- return triggerTime;
- }
-
- public void setTriggerTime(Date triggerTime) {
- this.triggerTime = triggerTime;
- }
-
- public int getTriggerCode() {
- return triggerCode;
- }
-
- public void setTriggerCode(int triggerCode) {
- this.triggerCode = triggerCode;
- }
-
- public String getTriggerMsg() {
- return triggerMsg;
- }
-
- public void setTriggerMsg(String triggerMsg) {
- this.triggerMsg = triggerMsg;
- }
-
- public Date getHandleTime() {
- return handleTime;
- }
-
- public void setHandleTime(Date handleTime) {
- this.handleTime = handleTime;
- }
-
- public int getHandleCode() {
- return handleCode;
- }
-
- public void setHandleCode(int handleCode) {
- this.handleCode = handleCode;
- }
-
- public String getHandleMsg() {
- return handleMsg;
- }
-
- public void setHandleMsg(String handleMsg) {
- this.handleMsg = handleMsg;
- }
-
- public int getAlarmStatus() {
- return alarmStatus;
- }
-
- public void setAlarmStatus(int alarmStatus) {
- this.alarmStatus = alarmStatus;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
deleted file mode 100644
index 7b1ca461..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogGlue.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * xxl-job log for glue, used to track job code process
- * @author xuxueli 2016-5-19 17:57:46
- */
-public class XxlJobLogGlue {
-
- private int id;
- private int jobId; // 任务主键ID
- private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum
- private String glueSource;
- private String glueRemark;
- private Date addTime;
- private Date updateTime;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getJobId() {
- return jobId;
- }
-
- public void setJobId(int jobId) {
- this.jobId = jobId;
- }
-
- public String getGlueType() {
- return glueType;
- }
-
- public void setGlueType(String glueType) {
- this.glueType = glueType;
- }
-
- public String getGlueSource() {
- return glueSource;
- }
-
- public void setGlueSource(String glueSource) {
- this.glueSource = glueSource;
- }
-
- public String getGlueRemark() {
- return glueRemark;
- }
-
- public void setGlueRemark(String glueRemark) {
- this.glueRemark = glueRemark;
- }
-
- public Date getAddTime() {
- return addTime;
- }
-
- public void setAddTime(Date addTime) {
- this.addTime = addTime;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
deleted file mode 100644
index e58ff1a9..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobLogReport.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-public class XxlJobLogReport {
-
- private int id;
-
- private Date triggerDay;
-
- private int runningCount;
- private int sucCount;
- private int failCount;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Date getTriggerDay() {
- return triggerDay;
- }
-
- public void setTriggerDay(Date triggerDay) {
- this.triggerDay = triggerDay;
- }
-
- public int getRunningCount() {
- return runningCount;
- }
-
- public void setRunningCount(int runningCount) {
- this.runningCount = runningCount;
- }
-
- public int getSucCount() {
- return sucCount;
- }
-
- public void setSucCount(int sucCount) {
- this.sucCount = sucCount;
- }
-
- public int getFailCount() {
- return failCount;
- }
-
- public void setFailCount(int failCount) {
- this.failCount = failCount;
- }
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
deleted file mode 100644
index 924d6d33..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import java.util.Date;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-public class XxlJobRegistry {
-
- private int id;
- private String registryGroup;
- private String registryKey;
- private String registryValue;
- private Date updateTime;
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getRegistryGroup() {
- return registryGroup;
- }
-
- public void setRegistryGroup(String registryGroup) {
- this.registryGroup = registryGroup;
- }
-
- public String getRegistryKey() {
- return registryKey;
- }
-
- public void setRegistryKey(String registryKey) {
- this.registryKey = registryKey;
- }
-
- public String getRegistryValue() {
- return registryValue;
- }
-
- public void setRegistryValue(String registryValue) {
- this.registryValue = registryValue;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime) {
- this.updateTime = updateTime;
- }
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
deleted file mode 100644
index db17327a..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobUser.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.xxl.job.admin.core.model;
-
-import org.springframework.util.StringUtils;
-
-/**
- * @author xuxueli 2019-05-04 16:43:12
- */
-public class XxlJobUser {
-
- private int id;
- private String username; // 账号
- private String password; // 密码
- private int role; // 角色:0-普通用户、1-管理员
- private String permission; // 权限:执行器ID列表,多个逗号分割
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public int getRole() {
- return role;
- }
-
- public void setRole(int role) {
- this.role = role;
- }
-
- public String getPermission() {
- return permission;
- }
-
- public void setPermission(String permission) {
- this.permission = permission;
- }
-
- // plugin
- public boolean validPermission(int jobGroup){
- if (this.role == 1) {
- return true;
- } else {
- if (StringUtils.hasText(this.permission)) {
- for (String permissionItem : this.permission.split(",")) {
- if (String.valueOf(jobGroup).equals(permissionItem)) {
- return true;
- }
- }
- }
- return false;
- }
-
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
deleted file mode 100644
index b2dd1515..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/RemoteHttpJobBean.java
+++ /dev/null
@@ -1,32 +0,0 @@
-//package com.xxl.job.admin.core.jobbean;
-//
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-//import org.quartz.JobExecutionContext;
-//import org.quartz.JobExecutionException;
-//import org.quartz.JobKey;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.scheduling.quartz.QuartzJobBean;
-//
-///**
-// * http job bean
-// * “@DisallowConcurrentExecution” disable concurrent, thread size can not be only one, better given more
-// * @author xuxueli 2015-12-17 18:20:34
-// */
-////@DisallowConcurrentExecution
-//public class RemoteHttpJobBean extends QuartzJobBean {
-// private static Logger logger = LoggerFactory.getLogger(RemoteHttpJobBean.class);
-//
-// @Override
-// protected void executeInternal(JobExecutionContext context)
-// throws JobExecutionException {
-//
-// // load jobId
-// JobKey jobKey = context.getTrigger().getJobKey();
-// Integer jobId = Integer.valueOf(jobKey.getName());
-//
-//
-// }
-//
-//}
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
deleted file mode 100644
index 1e62aa19..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobDynamicScheduler.java
+++ /dev/null
@@ -1,413 +0,0 @@
-//package com.xxl.job.admin.core.schedule;
-//
-//import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-//import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
-//import com.xxl.job.admin.core.model.XxlJobInfo;
-//import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
-//import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
-//import com.xxl.job.admin.core.util.I18nUtil;
-//import com.xxl.job.core.biz.AdminBiz;
-//import com.xxl.job.core.biz.ExecutorBiz;
-//import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-//import com.xxl.rpc.remoting.invoker.XxlRpcInvokerFactory;
-//import com.xxl.rpc.remoting.invoker.call.CallType;
-//import com.xxl.rpc.remoting.invoker.reference.XxlRpcReferenceBean;
-//import com.xxl.rpc.remoting.invoker.route.LoadBalance;
-//import com.xxl.rpc.remoting.net.NetEnum;
-//import com.xxl.rpc.remoting.net.impl.servlet.server.ServletServerHandler;
-//import com.xxl.rpc.remoting.provider.XxlRpcProviderFactory;
-//import com.xxl.rpc.serialize.Serializer;
-//import org.quartz.*;
-//import org.quartz.Trigger.TriggerState;
-//import org.quartz.impl.triggers.CronTriggerImpl;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.util.Assert;
-//
-//import javax.servlet.ServletException;
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.Date;
-//import java.util.concurrent.ConcurrentHashMap;
-//
-///**
-// * base quartz scheduler util
-// * @author xuxueli 2015-12-19 16:13:53
-// */
-//public final class XxlJobDynamicScheduler {
-// private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler_old.class);
-//
-// // ---------------------- param ----------------------
-//
-// // scheduler
-// private static Scheduler scheduler;
-// public void setScheduler(Scheduler scheduler) {
-// XxlJobDynamicScheduler_old.scheduler = scheduler;
-// }
-//
-//
-// // ---------------------- init + destroy ----------------------
-// public void start() throws Exception {
-// // valid
-// Assert.notNull(scheduler, "quartz scheduler is null");
-//
-// // init i18n
-// initI18n();
-//
-// // admin registry monitor run
-// JobRegistryMonitorHelper.getInstance().start();
-//
-// // admin monitor run
-// JobFailMonitorHelper.getInstance().start();
-//
-// // admin-server
-// initRpcProvider();
-//
-// logger.info(">>>>>>>>> init xxl-job admin success.");
-// }
-//
-//
-// public void destroy() throws Exception {
-// // admin trigger pool stop
-// JobTriggerPoolHelper.toStop();
-//
-// // admin registry stop
-// JobRegistryMonitorHelper.getInstance().toStop();
-//
-// // admin monitor stop
-// JobFailMonitorHelper.getInstance().toStop();
-//
-// // admin-server
-// stopRpcProvider();
-// }
-//
-//
-// // ---------------------- I18n ----------------------
-//
-// private void initI18n(){
-// for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
-// item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
-// }
-// }
-//
-//
-// // ---------------------- admin rpc provider (no server version) ----------------------
-// private static ServletServerHandler servletServerHandler;
-// private void initRpcProvider(){
-// // init
-// XxlRpcProviderFactory xxlRpcProviderFactory = new XxlRpcProviderFactory();
-// xxlRpcProviderFactory.initConfig(
-// NetEnum.NETTY_HTTP,
-// Serializer.SerializeEnum.HESSIAN.getSerializer(),
-// null,
-// 0,
-// XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-// null,
-// null);
-//
-// // add services
-// xxlRpcProviderFactory.addService(AdminBiz.class.getName(), null, XxlJobAdminConfig.getAdminConfig().getAdminBiz());
-//
-// // servlet handler
-// servletServerHandler = new ServletServerHandler(xxlRpcProviderFactory);
-// }
-// private void stopRpcProvider() throws Exception {
-// XxlRpcInvokerFactory.getInstance().stop();
-// }
-// public static void invokeAdminService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
-// servletServerHandler.handle(null, request, response);
-// }
-//
-//
-// // ---------------------- executor-client ----------------------
-// private static ConcurrentHashMap executorBizRepository = new ConcurrentHashMap();
-// public static ExecutorBiz getExecutorBiz(String address) throws Exception {
-// // valid
-// if (address==null || address.trim().length()==0) {
-// return null;
-// }
-//
-// // load-cache
-// address = address.trim();
-// ExecutorBiz executorBiz = executorBizRepository.get(address);
-// if (executorBiz != null) {
-// return executorBiz;
-// }
-//
-// // set-cache
-// executorBiz = (ExecutorBiz) new XxlRpcReferenceBean(
-// NetEnum.NETTY_HTTP,
-// Serializer.SerializeEnum.HESSIAN.getSerializer(),
-// CallType.SYNC,
-// LoadBalance.ROUND,
-// ExecutorBiz.class,
-// null,
-// 5000,
-// address,
-// XxlJobAdminConfig.getAdminConfig().getAccessToken(),
-// null,
-// null).getObject();
-//
-// executorBizRepository.put(address, executorBiz);
-// return executorBiz;
-// }
-//
-//
-// // ---------------------- schedule util ----------------------
-//
-// /**
-// * fill job info
-// *
-// * @param jobInfo
-// */
-// public static void fillJobInfo(XxlJobInfo jobInfo) {
-//
-// String name = String.valueOf(jobInfo.getId());
-//
-// // trigger key
-// TriggerKey triggerKey = TriggerKey.triggerKey(name);
-// try {
-//
-// // trigger cron
-// Trigger trigger = scheduler.getTrigger(triggerKey);
-// if (trigger!=null && trigger instanceof CronTriggerImpl) {
-// String cronExpression = ((CronTriggerImpl) trigger).getCronExpression();
-// jobInfo.setJobCron(cronExpression);
-// }
-//
-// // trigger state
-// TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-// if (triggerState!=null) {
-// jobInfo.setJobStatus(triggerState.name());
-// }
-//
-// //JobKey jobKey = new JobKey(jobInfo.getJobName(), String.valueOf(jobInfo.getJobGroup()));
-// //JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-// //String jobClass = jobDetail.getJobClass().getName();
-//
-// } catch (SchedulerException e) {
-// logger.error(e.getMessage(), e);
-// }
-// }
-//
-//
-// /**
-// * add trigger + job
-// *
-// * @param jobName
-// * @param cronExpression
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean addJob(String jobName, String cronExpression) throws SchedulerException {
-// // 1、job key
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-// JobKey jobKey = new JobKey(jobName);
-//
-// // 2、valid
-// if (scheduler.checkExists(triggerKey)) {
-// return true; // PASS
-// }
-//
-// // 3、corn trigger
-// CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing(); // withMisfireHandlingInstructionDoNothing 忽略掉调度终止过程中忽略的调度
-// CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-// // 4、job detail
-// Class extends Job> jobClass_ = RemoteHttpJobBean.class; // Class.forName(jobInfo.getJobClass());
-// JobDetail jobDetail = JobBuilder.newJob(jobClass_).withIdentity(jobKey).build();
-//
-// /*if (jobInfo.getJobData()!=null) {
-// JobDataMap jobDataMap = jobDetail.getJobDataMap();
-// jobDataMap.putAll(JacksonUtil.readValue(jobInfo.getJobData(), Map.class));
-// // JobExecutionContext context.getMergedJobDataMap().get("mailGuid");
-// }*/
-//
-// // 5、schedule job
-// Date date = scheduler.scheduleJob(jobDetail, cronTrigger);
-//
-// logger.info(">>>>>>>>>>> addJob success(quartz), jobDetail:{}, cronTrigger:{}, date:{}", jobDetail, cronTrigger, date);
-// return true;
-// }
-//
-//
-// /**
-// * remove trigger + job
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean removeJob(String jobName) throws SchedulerException {
-//
-// JobKey jobKey = new JobKey(jobName);
-// scheduler.deleteJob(jobKey);
-//
-// /*TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.unscheduleJob(triggerKey); // trigger + job
-// }*/
-//
-// logger.info(">>>>>>>>>>> removeJob success(quartz), jobKey:{}", jobKey);
-// return true;
-// }
-//
-//
-// /**
-// * updateJobCron
-// *
-// * @param jobName
-// * @param cronExpression
-// * @return
-// * @throws SchedulerException
-// */
-// public static boolean updateJobCron(String jobName, String cronExpression) throws SchedulerException {
-//
-// // 1、job key
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// // 2、valid
-// if (!scheduler.checkExists(triggerKey)) {
-// return true; // PASS
-// }
-//
-// CronTrigger oldTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
-//
-// // 3、avoid repeat cron
-// String oldCron = oldTrigger.getCronExpression();
-// if (oldCron.equals(cronExpression)){
-// return true; // PASS
-// }
-//
-// // 4、new cron trigger
-// CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionDoNothing();
-// oldTrigger = oldTrigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(cronScheduleBuilder).build();
-//
-// // 5、rescheduleJob
-// scheduler.rescheduleJob(triggerKey, oldTrigger);
-//
-// /*
-// JobKey jobKey = new JobKey(jobName);
-//
-// // old job detail
-// JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-//
-// // new trigger
-// HashSet triggerSet = new HashSet();
-// triggerSet.add(cronTrigger);
-// // cover trigger of job detail
-// scheduler.scheduleJob(jobDetail, triggerSet, true);*/
-//
-// logger.info(">>>>>>>>>>> resumeJob success, JobName:{}", jobName);
-// return true;
-// }
-//
-//
-// /**
-// * pause
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean pauseJob(String jobName) throws SchedulerException {
-//
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.pauseTrigger(triggerKey);
-// result = true;
-// }
-//
-// logger.info(">>>>>>>>>>> pauseJob {}, triggerKey:{}", (result?"success":"fail"),triggerKey);
-// return result;
-// }*/
-//
-//
-// /**
-// * resume
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean resumeJob(String jobName) throws SchedulerException {
-//
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.resumeTrigger(triggerKey);
-// result = true;
-// }
-//
-// logger.info(">>>>>>>>>>> resumeJob {}, triggerKey:{}", (result?"success":"fail"), triggerKey);
-// return result;
-// }*/
-//
-//
-// /**
-// * run
-// *
-// * @param jobName
-// * @return
-// * @throws SchedulerException
-// */
-// /*public static boolean triggerJob(String jobName) throws SchedulerException {
-// // TriggerKey : name + group
-// JobKey jobKey = new JobKey(jobName);
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
-//
-// boolean result = false;
-// if (scheduler.checkExists(triggerKey)) {
-// scheduler.triggerJob(jobKey);
-// result = true;
-// logger.info(">>>>>>>>>>> runJob success, jobKey:{}", jobKey);
-// } else {
-// logger.info(">>>>>>>>>>> runJob fail, jobKey:{}", jobKey);
-// }
-// return result;
-// }*/
-//
-//
-// /**
-// * finaAllJobList
-// *
-// * @return
-// *//*
-// @Deprecated
-// public static List> finaAllJobList(){
-// List> jobList = new ArrayList>();
-//
-// try {
-// if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) {
-// return null;
-// }
-// String groupName = scheduler.getJobGroupNames().get(0);
-// Set jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName));
-// if (jobKeys!=null && jobKeys.size()>0) {
-// for (JobKey jobKey : jobKeys) {
-// TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP);
-// Trigger trigger = scheduler.getTrigger(triggerKey);
-// JobDetail jobDetail = scheduler.getJobDetail(jobKey);
-// TriggerState triggerState = scheduler.getTriggerState(triggerKey);
-// Map jobMap = new HashMap();
-// jobMap.put("TriggerKey", triggerKey);
-// jobMap.put("Trigger", trigger);
-// jobMap.put("JobDetail", jobDetail);
-// jobMap.put("TriggerState", triggerState);
-// jobList.add(jobMap);
-// }
-// }
-//
-// } catch (SchedulerException e) {
-// logger.error(e.getMessage(), e);
-// return null;
-// }
-// return jobList;
-// }*/
-//
-//}
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
deleted file mode 100644
index ad074307..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/old/XxlJobThreadPool.java
+++ /dev/null
@@ -1,58 +0,0 @@
-//package com.xxl.job.admin.core.quartz;
-//
-//import org.quartz.SchedulerConfigException;
-//import org.quartz.spi.ThreadPool;
-//
-///**
-// * single thread pool, for async trigger
-// *
-// * @author xuxueli 2019-03-06
-// */
-//public class XxlJobThreadPool implements ThreadPool {
-//
-// @Override
-// public boolean runInThread(Runnable runnable) {
-//
-// // async run
-// runnable.run();
-// return true;
-//
-// //return false;
-// }
-//
-// @Override
-// public int blockForAvailableThreads() {
-// return 1;
-// }
-//
-// @Override
-// public void initialize() throws SchedulerConfigException {
-//
-// }
-//
-// @Override
-// public void shutdown(boolean waitForJobsToComplete) {
-//
-// }
-//
-// @Override
-// public int getPoolSize() {
-// return 1;
-// }
-//
-// @Override
-// public void setInstanceId(String schedInstId) {
-//
-// }
-//
-// @Override
-// public void setInstanceName(String schedName) {
-//
-// }
-//
-// // support
-// public void setThreadCount(int count) {
-// //
-// }
-//
-//}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
deleted file mode 100644
index 7fff93a9..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.xxl.job.admin.core.route;
-
-import com.xxl.job.admin.core.route.strategy.*;
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public enum ExecutorRouteStrategyEnum {
-
- FIRST(I18nUtil.getString("jobconf_route_first"), new ExecutorRouteFirst()),
- LAST(I18nUtil.getString("jobconf_route_last"), new ExecutorRouteLast()),
- ROUND(I18nUtil.getString("jobconf_route_round"), new ExecutorRouteRound()),
- RANDOM(I18nUtil.getString("jobconf_route_random"), new ExecutorRouteRandom()),
- CONSISTENT_HASH(I18nUtil.getString("jobconf_route_consistenthash"), new ExecutorRouteConsistentHash()),
- LEAST_FREQUENTLY_USED(I18nUtil.getString("jobconf_route_lfu"), new ExecutorRouteLFU()),
- LEAST_RECENTLY_USED(I18nUtil.getString("jobconf_route_lru"), new ExecutorRouteLRU()),
- FAILOVER(I18nUtil.getString("jobconf_route_failover"), new ExecutorRouteFailover()),
- BUSYOVER(I18nUtil.getString("jobconf_route_busyover"), new ExecutorRouteBusyover()),
- SHARDING_BROADCAST(I18nUtil.getString("jobconf_route_shard"), null);
-
- ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
- this.title = title;
- this.router = router;
- }
-
- private String title;
- private ExecutorRouter router;
-
- public String getTitle() {
- return title;
- }
- public ExecutorRouter getRouter() {
- return router;
- }
-
- public static ExecutorRouteStrategyEnum match(String name, ExecutorRouteStrategyEnum defaultItem){
- if (name != null) {
- for (ExecutorRouteStrategyEnum item: ExecutorRouteStrategyEnum.values()) {
- if (item.name().equals(name)) {
- return item;
- }
- }
- }
- return defaultItem;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
deleted file mode 100644
index 5de9a1d0..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.xxl.job.admin.core.route;
-
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public abstract class ExecutorRouter {
- protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class);
-
- /**
- * route address
- *
- * @param addressList
- * @return ReturnT.content=address
- */
- public abstract ReturnT route(TriggerParam triggerParam, List addressList);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
deleted file mode 100644
index 868560fc..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.IdleBeatParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteBusyover extends ExecutorRouter {
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- StringBuffer idleBeatResultSB = new StringBuffer();
- for (String address : addressList) {
- // beat
- ReturnT idleBeatResult = null;
- try {
- ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
- idleBeatResult = executorBiz.idleBeat(new IdleBeatParam(triggerParam.getJobId()));
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- idleBeatResult = new ReturnT(ReturnT.FAIL_CODE, ""+e );
- }
- idleBeatResultSB.append( (idleBeatResultSB.length()>0)?"
":"")
- .append(I18nUtil.getString("jobconf_idleBeat") + ":")
- .append("
address:").append(address)
- .append("
code:").append(idleBeatResult.getCode())
- .append("
msg:").append(idleBeatResult.getMsg());
-
- // beat success
- if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
- idleBeatResult.setMsg(idleBeatResultSB.toString());
- idleBeatResult.setContent(address);
- return idleBeatResult;
- }
- }
-
- return new ReturnT(ReturnT.FAIL_CODE, idleBeatResultSB.toString());
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
deleted file mode 100644
index 41ac671c..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * 分组下机器地址相同,不同JOB均匀散列在不同机器上,保证分组下机器分配JOB平均;且每个JOB固定调度其中一台机器;
- * a、virtual node:解决不均衡问题
- * b、hash method replace hashCode:String的hashCode可能重复,需要进一步扩大hashCode的取值范围
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteConsistentHash extends ExecutorRouter {
-
- private static int VIRTUAL_NODE_NUM = 100;
-
- /**
- * get hash code on 2^32 ring (md5散列的方式计算hash值)
- * @param key
- * @return
- */
- private static long hash(String key) {
-
- // md5 byte
- MessageDigest md5;
- try {
- md5 = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException e) {
- throw new RuntimeException("MD5 not supported", e);
- }
- md5.reset();
- byte[] keyBytes = null;
- try {
- keyBytes = key.getBytes("UTF-8");
- } catch (UnsupportedEncodingException e) {
- throw new RuntimeException("Unknown string :" + key, e);
- }
-
- md5.update(keyBytes);
- byte[] digest = md5.digest();
-
- // hash code, Truncate to 32-bits
- long hashCode = ((long) (digest[3] & 0xFF) << 24)
- | ((long) (digest[2] & 0xFF) << 16)
- | ((long) (digest[1] & 0xFF) << 8)
- | (digest[0] & 0xFF);
-
- long truncateHashCode = hashCode & 0xffffffffL;
- return truncateHashCode;
- }
-
- public String hashJob(int jobId, List addressList) {
-
- // ------A1------A2-------A3------
- // -----------J1------------------
- TreeMap addressRing = new TreeMap();
- for (String address: addressList) {
- for (int i = 0; i < VIRTUAL_NODE_NUM; i++) {
- long addressHash = hash("SHARD-" + address + "-NODE-" + i);
- addressRing.put(addressHash, address);
- }
- }
-
- long jobHash = hash(String.valueOf(jobId));
- SortedMap lastRing = addressRing.tailMap(jobHash);
- if (!lastRing.isEmpty()) {
- return lastRing.get(lastRing.firstKey());
- }
- return addressRing.firstEntry().getValue();
- }
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- String address = hashJob(triggerParam.getJobId(), addressList);
- return new ReturnT(address);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
deleted file mode 100644
index a2e4c909..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteFailover extends ExecutorRouter {
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
-
- StringBuffer beatResultSB = new StringBuffer();
- for (String address : addressList) {
- // beat
- ReturnT beatResult = null;
- try {
- ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
- beatResult = executorBiz.beat();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- beatResult = new ReturnT(ReturnT.FAIL_CODE, ""+e );
- }
- beatResultSB.append( (beatResultSB.length()>0)?"
":"")
- .append(I18nUtil.getString("jobconf_beat") + ":")
- .append("
address:").append(address)
- .append("
code:").append(beatResult.getCode())
- .append("
msg:").append(beatResult.getMsg());
-
- // beat success
- if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
-
- beatResult.setMsg(beatResultSB.toString());
- beatResult.setContent(address);
- return beatResult;
- }
- }
- return new ReturnT(ReturnT.FAIL_CODE, beatResultSB.toString());
-
- }
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
deleted file mode 100644
index de4d7afb..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteFirst extends ExecutorRouter {
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList){
- return new ReturnT(addressList.get(0));
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
deleted file mode 100644
index 9df19726..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * 单个JOB对应的每个执行器,使用频率最低的优先被选举
- * a(*)、LFU(Least Frequently Used):最不经常使用,频率/次数
- * b、LRU(Least Recently Used):最近最久未使用,时间
- *
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLFU extends ExecutorRouter {
-
- private static ConcurrentMap> jobLfuMap = new ConcurrentHashMap>();
- private static long CACHE_VALID_TIME = 0;
-
- public String route(int jobId, List addressList) {
-
- // cache clear
- if (System.currentTimeMillis() > CACHE_VALID_TIME) {
- jobLfuMap.clear();
- CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
- }
-
- // lfu item init
- HashMap lfuItemMap = jobLfuMap.get(jobId); // Key排序可以用TreeMap+构造入参Compare;Value排序暂时只能通过ArrayList;
- if (lfuItemMap == null) {
- lfuItemMap = new HashMap();
- jobLfuMap.putIfAbsent(jobId, lfuItemMap); // 避免重复覆盖
- }
-
- // put new
- for (String address: addressList) {
- if (!lfuItemMap.containsKey(address) || lfuItemMap.get(address) >1000000 ) {
- lfuItemMap.put(address, new Random().nextInt(addressList.size())); // 初始化时主动Random一次,缓解首次压力
- }
- }
- // remove old
- List delKeys = new ArrayList<>();
- for (String existKey: lfuItemMap.keySet()) {
- if (!addressList.contains(existKey)) {
- delKeys.add(existKey);
- }
- }
- if (delKeys.size() > 0) {
- for (String delKey: delKeys) {
- lfuItemMap.remove(delKey);
- }
- }
-
- // load least userd count address
- List> lfuItemList = new ArrayList>(lfuItemMap.entrySet());
- Collections.sort(lfuItemList, new Comparator>() {
- @Override
- public int compare(Map.Entry o1, Map.Entry o2) {
- return o1.getValue().compareTo(o2.getValue());
- }
- });
-
- Map.Entry addressItem = lfuItemList.get(0);
- String minAddress = addressItem.getKey();
- addressItem.setValue(addressItem.getValue() + 1);
-
- return addressItem.getKey();
- }
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- String address = route(triggerParam.getJobId(), addressList);
- return new ReturnT(address);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
deleted file mode 100644
index 2d540067..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * 单个JOB对应的每个执行器,最久为使用的优先被选举
- * a、LFU(Least Frequently Used):最不经常使用,频率/次数
- * b(*)、LRU(Least Recently Used):最近最久未使用,时间
- *
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLRU extends ExecutorRouter {
-
- private static ConcurrentMap> jobLRUMap = new ConcurrentHashMap>();
- private static long CACHE_VALID_TIME = 0;
-
- public String route(int jobId, List addressList) {
-
- // cache clear
- if (System.currentTimeMillis() > CACHE_VALID_TIME) {
- jobLRUMap.clear();
- CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
- }
-
- // init lru
- LinkedHashMap lruItem = jobLRUMap.get(jobId);
- if (lruItem == null) {
- /**
- * LinkedHashMap
- * a、accessOrder:true=访问顺序排序(get/put时排序);false=插入顺序排期;
- * b、removeEldestEntry:新增元素时将会调用,返回true时会删除最老元素;可封装LinkedHashMap并重写该方法,比如定义最大容量,超出是返回true即可实现固定长度的LRU算法;
- */
- lruItem = new LinkedHashMap(16, 0.75f, true);
- jobLRUMap.putIfAbsent(jobId, lruItem);
- }
-
- // put new
- for (String address: addressList) {
- if (!lruItem.containsKey(address)) {
- lruItem.put(address, address);
- }
- }
- // remove old
- List delKeys = new ArrayList<>();
- for (String existKey: lruItem.keySet()) {
- if (!addressList.contains(existKey)) {
- delKeys.add(existKey);
- }
- }
- if (delKeys.size() > 0) {
- for (String delKey: delKeys) {
- lruItem.remove(delKey);
- }
- }
-
- // load
- String eldestKey = lruItem.entrySet().iterator().next().getKey();
- String eldestValue = lruItem.get(eldestKey);
- return eldestValue;
- }
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- String address = route(triggerParam.getJobId(), addressList);
- return new ReturnT(address);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
deleted file mode 100644
index 4ff3cf6b..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteLast extends ExecutorRouter {
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- return new ReturnT(addressList.get(addressList.size()-1));
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
deleted file mode 100644
index 5ea4a384..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-import java.util.Random;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteRandom extends ExecutorRouter {
-
- private static Random localRandom = new Random();
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- String address = addressList.get(localRandom.nextInt(addressList.size()));
- return new ReturnT(address);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
deleted file mode 100644
index d0ea2baa..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.xxl.job.admin.core.route.strategy;
-
-import com.xxl.job.admin.core.route.ExecutorRouter;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Created by xuxueli on 17/3/10.
- */
-public class ExecutorRouteRound extends ExecutorRouter {
-
- private static ConcurrentMap routeCountEachJob = new ConcurrentHashMap<>();
- private static long CACHE_VALID_TIME = 0;
-
- private static int count(int jobId) {
- // cache clear
- if (System.currentTimeMillis() > CACHE_VALID_TIME) {
- routeCountEachJob.clear();
- CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
- }
-
- AtomicInteger count = routeCountEachJob.get(jobId);
- if (count == null || count.get() > 1000000) {
- // 初始化时主动Random一次,缓解首次压力
- count = new AtomicInteger(new Random().nextInt(100));
- } else {
- // count++
- count.addAndGet(1);
- }
- routeCountEachJob.put(jobId, count);
- return count.get();
- }
-
- @Override
- public ReturnT route(TriggerParam triggerParam, List addressList) {
- String address = addressList.get(count(triggerParam.getJobId())%addressList.size());
- return new ReturnT(address);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/MisfireStrategyEnum.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/MisfireStrategyEnum.java
deleted file mode 100644
index 0b9b4a9c..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/MisfireStrategyEnum.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.xxl.job.admin.core.scheduler;
-
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * @author xuxueli 2020-10-29 21:11:23
- */
-public enum MisfireStrategyEnum {
-
- /**
- * do nothing
- */
- DO_NOTHING(I18nUtil.getString("misfire_strategy_do_nothing")),
-
- /**
- * fire once now
- */
- FIRE_ONCE_NOW(I18nUtil.getString("misfire_strategy_fire_once_now"));
-
- private String title;
-
- MisfireStrategyEnum(String title) {
- this.title = title;
- }
-
- public String getTitle() {
- return title;
- }
-
- public static MisfireStrategyEnum match(String name, MisfireStrategyEnum defaultItem){
- for (MisfireStrategyEnum item: MisfireStrategyEnum.values()) {
- if (item.name().equals(name)) {
- return item;
- }
- }
- return defaultItem;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/ScheduleTypeEnum.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/ScheduleTypeEnum.java
deleted file mode 100644
index aa334fda..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/ScheduleTypeEnum.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.xxl.job.admin.core.scheduler;
-
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * @author xuxueli 2020-10-29 21:11:23
- */
-public enum ScheduleTypeEnum {
-
- NONE(I18nUtil.getString("schedule_type_none")),
-
- /**
- * schedule by cron
- */
- CRON(I18nUtil.getString("schedule_type_cron")),
-
- /**
- * schedule by fixed rate (in seconds)
- */
- FIX_RATE(I18nUtil.getString("schedule_type_fix_rate")),
-
- /**
- * schedule by fix delay (in seconds), after the last time
- */
- /*FIX_DELAY(I18nUtil.getString("schedule_type_fix_delay"))*/;
-
- private String title;
-
- ScheduleTypeEnum(String title) {
- this.title = title;
- }
-
- public String getTitle() {
- return title;
- }
-
- public static ScheduleTypeEnum match(String name, ScheduleTypeEnum defaultItem){
- for (ScheduleTypeEnum item: ScheduleTypeEnum.values()) {
- if (item.name().equals(name)) {
- return item;
- }
- }
- return defaultItem;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
deleted file mode 100644
index bb2cda8b..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package com.xxl.job.admin.core.scheduler;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.thread.*;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.client.ExecutorBizClient;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * @author xuxueli 2018-10-28 00:18:17
- */
-
-public class XxlJobScheduler {
- private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class);
-
-
- public void init() throws Exception {
- // init i18n
- initI18n();
-
- // admin trigger pool start
- JobTriggerPoolHelper.toStart();
-
- // admin registry monitor run
- JobRegistryHelper.getInstance().start();
-
- // admin fail-monitor run
- JobFailMonitorHelper.getInstance().start();
-
- // admin lose-monitor run ( depend on JobTriggerPoolHelper )
- JobCompleteHelper.getInstance().start();
-
- // admin log report start
- JobLogReportHelper.getInstance().start();
-
- // start-schedule ( depend on JobTriggerPoolHelper )
- JobScheduleHelper.getInstance().start();
-
- logger.info(">>>>>>>>> init xxl-job admin success.");
- }
-
-
- public void destroy() throws Exception {
-
- // stop-schedule
- JobScheduleHelper.getInstance().toStop();
-
- // admin log report stop
- JobLogReportHelper.getInstance().toStop();
-
- // admin lose-monitor stop
- JobCompleteHelper.getInstance().toStop();
-
- // admin fail-monitor stop
- JobFailMonitorHelper.getInstance().toStop();
-
- // admin registry stop
- JobRegistryHelper.getInstance().toStop();
-
- // admin trigger pool stop
- JobTriggerPoolHelper.toStop();
-
- }
-
- // ---------------------- I18n ----------------------
-
- private void initI18n(){
- for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) {
- item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
- }
- }
-
- // ---------------------- executor-client ----------------------
- private static ConcurrentMap executorBizRepository = new ConcurrentHashMap();
- public static ExecutorBiz getExecutorBiz(String address) throws Exception {
- // valid
- if (address==null || address.trim().length()==0) {
- return null;
- }
-
- // load-cache
- address = address.trim();
- ExecutorBiz executorBiz = executorBizRepository.get(address);
- if (executorBiz != null) {
- return executorBiz;
- }
-
- // set-cache
- executorBiz = new ExecutorBizClient(address, XxlJobAdminConfig.getAdminConfig().getAccessToken());
-
- executorBizRepository.put(address, executorBiz);
- return executorBiz;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
deleted file mode 100644
index 5698926a..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.complete.XxlJobCompleter;
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.model.HandleCallbackParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.util.DateUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-import java.util.List;
-import java.util.concurrent.*;
-
-/**
- * job lose-monitor instance
- *
- * @author xuxueli 2015-9-1 18:05:56
- */
-public class JobCompleteHelper {
- private static Logger logger = LoggerFactory.getLogger(JobCompleteHelper.class);
-
- private static JobCompleteHelper instance = new JobCompleteHelper();
- public static JobCompleteHelper getInstance(){
- return instance;
- }
-
- // ---------------------- monitor ----------------------
-
- private ThreadPoolExecutor callbackThreadPool = null;
- private Thread monitorThread;
- private volatile boolean toStop = false;
- public void start(){
-
- // for callback
- callbackThreadPool = new ThreadPoolExecutor(
- 2,
- 20,
- 30L,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue(3000),
- new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "xxl-job, admin JobLosedMonitorHelper-callbackThreadPool-" + r.hashCode());
- }
- },
- new RejectedExecutionHandler() {
- @Override
- public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
- r.run();
- logger.warn(">>>>>>>>>>> xxl-job, callback too fast, match threadpool rejected handler(run now).");
- }
- });
-
-
- // for monitor
- monitorThread = new Thread(new Runnable() {
-
- @Override
- public void run() {
-
- // wait for JobTriggerPoolHelper-init
- try {
- TimeUnit.MILLISECONDS.sleep(50);
- } catch (InterruptedException e) {
- if (!toStop) {
- logger.error(e.getMessage(), e);
- }
- }
-
- // monitor
- while (!toStop) {
- try {
- // 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
- Date losedTime = DateUtil.addMinutes(new Date(), -10);
- List losedJobIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLostJobIds(losedTime);
-
- if (losedJobIds!=null && losedJobIds.size()>0) {
- for (Long logId: losedJobIds) {
-
- XxlJobLog jobLog = new XxlJobLog();
- jobLog.setId(logId);
-
- jobLog.setHandleTime(new Date());
- jobLog.setHandleCode(ReturnT.FAIL_CODE);
- jobLog.setHandleMsg( I18nUtil.getString("joblog_lost_fail") );
-
- XxlJobCompleter.updateHandleInfoAndFinish(jobLog);
- }
-
- }
- } catch (Exception e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
- }
- }
-
- try {
- TimeUnit.SECONDS.sleep(60);
- } catch (Exception e) {
- if (!toStop) {
- logger.error(e.getMessage(), e);
- }
- }
-
- }
-
- logger.info(">>>>>>>>>>> xxl-job, JobLosedMonitorHelper stop");
-
- }
- });
- monitorThread.setDaemon(true);
- monitorThread.setName("xxl-job, admin JobLosedMonitorHelper");
- monitorThread.start();
- }
-
- public void toStop(){
- toStop = true;
-
- // stop registryOrRemoveThreadPool
- callbackThreadPool.shutdownNow();
-
- // stop monitorThread (interrupt and wait)
- monitorThread.interrupt();
- try {
- monitorThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
-
- // ---------------------- helper ----------------------
-
- public ReturnT callback(List callbackParamList) {
-
- callbackThreadPool.execute(new Runnable() {
- @Override
- public void run() {
- for (HandleCallbackParam handleCallbackParam: callbackParamList) {
- ReturnT callbackResult = callback(handleCallbackParam);
- logger.debug(">>>>>>>>> JobApiController.callback {}, handleCallbackParam={}, callbackResult={}",
- (callbackResult.getCode()== ReturnT.SUCCESS_CODE?"success":"fail"), handleCallbackParam, callbackResult);
- }
- }
- });
-
- return ReturnT.SUCCESS;
- }
-
- private ReturnT callback(HandleCallbackParam handleCallbackParam) {
- // valid log item
- XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(handleCallbackParam.getLogId());
- if (log == null) {
- return new ReturnT(ReturnT.FAIL_CODE, "log item not found.");
- }
- if (log.getHandleCode() > 0) {
- return new ReturnT(ReturnT.FAIL_CODE, "log repeate callback."); // avoid repeat callback, trigger child job etc
- }
-
- // handle msg
- StringBuffer handleMsg = new StringBuffer();
- if (log.getHandleMsg()!=null) {
- handleMsg.append(log.getHandleMsg()).append("
");
- }
- if (handleCallbackParam.getHandleMsg() != null) {
- handleMsg.append(handleCallbackParam.getHandleMsg());
- }
-
- // success, save log
- log.setHandleTime(new Date());
- log.setHandleCode(handleCallbackParam.getHandleCode());
- log.setHandleMsg(handleMsg.toString());
- XxlJobCompleter.updateHandleInfoAndFinish(log);
-
- return ReturnT.SUCCESS;
- }
-
-
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
deleted file mode 100644
index 8409d7b3..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.util.I18nUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-/**
- * job monitor instance
- *
- * @author xuxueli 2015-9-1 18:05:56
- */
-public class JobFailMonitorHelper {
- private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
-
- private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
- public static JobFailMonitorHelper getInstance(){
- return instance;
- }
-
- // ---------------------- monitor ----------------------
-
- private Thread monitorThread;
- private volatile boolean toStop = false;
- public void start(){
- monitorThread = new Thread(new Runnable() {
-
- @Override
- public void run() {
-
- // monitor
- while (!toStop) {
- try {
-
- List failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000);
- if (failLogIds!=null && !failLogIds.isEmpty()) {
- for (long failLogId: failLogIds) {
-
- // lock log
- int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, 0, -1);
- if (lockRet < 1) {
- continue;
- }
- XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
- XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
-
- // 1、fail retry monitor
- if (log.getExecutorFailRetryCount() > 0) {
- JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), log.getExecutorParam(), null);
- String retryMsg = "
>>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<<
";
- log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
- }
-
- // 2、fail alarm monitor
- int newAlarmStatus = 0; // 告警状态:0-默认、-1=锁定状态、1-无需告警、2-告警成功、3-告警失败
- if (info != null) {
- boolean alarmResult = XxlJobAdminConfig.getAdminConfig().getJobAlarmer().alarm(info, log);
- newAlarmStatus = alarmResult?2:3;
- } else {
- newAlarmStatus = 1;
- }
-
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1, newAlarmStatus);
- }
- }
-
- } catch (Exception e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
- }
- }
-
- try {
- TimeUnit.SECONDS.sleep(10);
- } catch (Exception e) {
- if (!toStop) {
- logger.error(e.getMessage(), e);
- }
- }
-
- }
-
- logger.info(">>>>>>>>>>> xxl-job, job fail monitor thread stop");
-
- }
- });
- monitorThread.setDaemon(true);
- monitorThread.setName("xxl-job, admin JobFailMonitorHelper");
- monitorThread.start();
- }
-
- public void toStop(){
- toStop = true;
- // interrupt and wait
- monitorThread.interrupt();
- try {
- monitorThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
deleted file mode 100644
index 2387a0c4..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-/**
- * job log report helper
- *
- * @author xuxueli 2019-11-22
- */
-public class JobLogReportHelper {
- private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class);
-
- private static JobLogReportHelper instance = new JobLogReportHelper();
- public static JobLogReportHelper getInstance(){
- return instance;
- }
-
-
- private Thread logrThread;
- private volatile boolean toStop = false;
- public void start(){
- logrThread = new Thread(new Runnable() {
-
- @Override
- public void run() {
-
- // last clean log time
- long lastCleanLogTime = 0;
-
-
- while (!toStop) {
-
- // 1、log-report refresh: refresh log report in 3 days
- try {
-
- for (int i = 0; i < 3; i++) {
-
- // today
- Calendar itemDay = Calendar.getInstance();
- itemDay.add(Calendar.DAY_OF_MONTH, -i);
- itemDay.set(Calendar.HOUR_OF_DAY, 0);
- itemDay.set(Calendar.MINUTE, 0);
- itemDay.set(Calendar.SECOND, 0);
- itemDay.set(Calendar.MILLISECOND, 0);
-
- Date todayFrom = itemDay.getTime();
-
- itemDay.set(Calendar.HOUR_OF_DAY, 23);
- itemDay.set(Calendar.MINUTE, 59);
- itemDay.set(Calendar.SECOND, 59);
- itemDay.set(Calendar.MILLISECOND, 999);
-
- Date todayTo = itemDay.getTime();
-
- // refresh log-report every minute
- XxlJobLogReport xxlJobLogReport = new XxlJobLogReport();
- xxlJobLogReport.setTriggerDay(todayFrom);
- xxlJobLogReport.setRunningCount(0);
- xxlJobLogReport.setSucCount(0);
- xxlJobLogReport.setFailCount(0);
-
- Map triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLogReport(todayFrom, todayTo);
- if (triggerCountMap!=null && triggerCountMap.size()>0) {
- int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))):0;
- int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))):0;
- int triggerDayCountSuc = triggerCountMap.containsKey("triggerDayCountSuc")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountSuc"))):0;
- int triggerDayCountFail = triggerDayCount - triggerDayCountRunning - triggerDayCountSuc;
-
- xxlJobLogReport.setRunningCount(triggerDayCountRunning);
- xxlJobLogReport.setSucCount(triggerDayCountSuc);
- xxlJobLogReport.setFailCount(triggerDayCountFail);
- }
-
- // do refresh
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport);
- if (ret < 1) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport);
- }
- }
-
- } catch (Exception e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job log report thread error:{}", e);
- }
- }
-
- // 2、log-clean: switch open & once each day
- if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays()>0
- && System.currentTimeMillis() - lastCleanLogTime > 24*60*60*1000) {
-
- // expire-time
- Calendar expiredDay = Calendar.getInstance();
- expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays());
- expiredDay.set(Calendar.HOUR_OF_DAY, 0);
- expiredDay.set(Calendar.MINUTE, 0);
- expiredDay.set(Calendar.SECOND, 0);
- expiredDay.set(Calendar.MILLISECOND, 0);
- Date clearBeforeTime = expiredDay.getTime();
-
- // clean expired log
- List logIds = null;
- do {
- logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
- if (logIds!=null && logIds.size()>0) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds);
- }
- } while (logIds!=null && logIds.size()>0);
-
- // update clean time
- lastCleanLogTime = System.currentTimeMillis();
- }
-
- try {
- TimeUnit.MINUTES.sleep(1);
- } catch (Exception e) {
- if (!toStop) {
- logger.error(e.getMessage(), e);
- }
- }
-
- }
-
- logger.info(">>>>>>>>>>> xxl-job, job log report thread stop");
-
- }
- });
- logrThread.setDaemon(true);
- logrThread.setName("xxl-job, admin JobLogReportHelper");
- logrThread.start();
- }
-
- public void toStop(){
- toStop = true;
- // interrupt and wait
- logrThread.interrupt();
- try {
- logrThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
deleted file mode 100644
index 37edfd98..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobRegistry;
-import com.xxl.job.core.biz.model.RegistryParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.enums.RegistryConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
-
-import java.util.*;
-import java.util.concurrent.*;
-
-/**
- * job registry instance
- * @author xuxueli 2016-10-02 19:10:24
- */
-public class JobRegistryHelper {
- private static Logger logger = LoggerFactory.getLogger(JobRegistryHelper.class);
-
- private static JobRegistryHelper instance = new JobRegistryHelper();
- public static JobRegistryHelper getInstance(){
- return instance;
- }
-
- private ThreadPoolExecutor registryOrRemoveThreadPool = null;
- private Thread registryMonitorThread;
- private volatile boolean toStop = false;
-
- public void start(){
-
- // for registry or remove
- registryOrRemoveThreadPool = new ThreadPoolExecutor(
- 2,
- 10,
- 30L,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue(2000),
- new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "xxl-job, admin JobRegistryMonitorHelper-registryOrRemoveThreadPool-" + r.hashCode());
- }
- },
- new RejectedExecutionHandler() {
- @Override
- public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
- r.run();
- logger.warn(">>>>>>>>>>> xxl-job, registry or remove too fast, match threadpool rejected handler(run now).");
- }
- });
-
- // for monitor
- registryMonitorThread = new Thread(new Runnable() {
- @Override
- public void run() {
- while (!toStop) {
- try {
- // auto registry group
- List groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().findByAddressType(0);
- if (groupList!=null && !groupList.isEmpty()) {
-
- // remove dead address (admin/executor)
- List ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
- if (ids!=null && ids.size()>0) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
- }
-
- // fresh online address (admin/executor)
- HashMap> appAddressMap = new HashMap>();
- List list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
- if (list != null) {
- for (XxlJobRegistry item: list) {
- if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
- String appname = item.getRegistryKey();
- List registryList = appAddressMap.get(appname);
- if (registryList == null) {
- registryList = new ArrayList();
- }
-
- if (!registryList.contains(item.getRegistryValue())) {
- registryList.add(item.getRegistryValue());
- }
- appAddressMap.put(appname, registryList);
- }
- }
- }
-
- // fresh group address
- for (XxlJobGroup group: groupList) {
- List registryList = appAddressMap.get(group.getAppname());
- String addressListStr = null;
- if (registryList!=null && !registryList.isEmpty()) {
- Collections.sort(registryList);
- StringBuilder addressListSB = new StringBuilder();
- for (String item:registryList) {
- addressListSB.append(item).append(",");
- }
- addressListStr = addressListSB.toString();
- addressListStr = addressListStr.substring(0, addressListStr.length()-1);
- }
- group.setAddressList(addressListStr);
- group.setUpdateTime(new Date());
-
- XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
- }
- }
- } catch (Exception e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
- }
- }
- try {
- TimeUnit.SECONDS.sleep(RegistryConfig.BEAT_TIMEOUT);
- } catch (InterruptedException e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job registry monitor thread error:{}", e);
- }
- }
- }
- logger.info(">>>>>>>>>>> xxl-job, job registry monitor thread stop");
- }
- });
- registryMonitorThread.setDaemon(true);
- registryMonitorThread.setName("xxl-job, admin JobRegistryMonitorHelper-registryMonitorThread");
- registryMonitorThread.start();
- }
-
- public void toStop(){
- toStop = true;
-
- // stop registryOrRemoveThreadPool
- registryOrRemoveThreadPool.shutdownNow();
-
- // stop monitir (interrupt and wait)
- registryMonitorThread.interrupt();
- try {
- registryMonitorThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
-
- // ---------------------- helper ----------------------
-
- public ReturnT registry(RegistryParam registryParam) {
-
- // valid
- if (!StringUtils.hasText(registryParam.getRegistryGroup())
- || !StringUtils.hasText(registryParam.getRegistryKey())
- || !StringUtils.hasText(registryParam.getRegistryValue())) {
- return new ReturnT(ReturnT.FAIL_CODE, "Illegal Argument.");
- }
-
- // async execute
- registryOrRemoveThreadPool.execute(new Runnable() {
- @Override
- public void run() {
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registryUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
- if (ret < 1) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registrySave(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date());
-
- // fresh
- freshGroupRegistryInfo(registryParam);
- }
- }
- });
-
- return ReturnT.SUCCESS;
- }
-
- public ReturnT registryRemove(RegistryParam registryParam) {
-
- // valid
- if (!StringUtils.hasText(registryParam.getRegistryGroup())
- || !StringUtils.hasText(registryParam.getRegistryKey())
- || !StringUtils.hasText(registryParam.getRegistryValue())) {
- return new ReturnT(ReturnT.FAIL_CODE, "Illegal Argument.");
- }
-
- // async execute
- registryOrRemoveThreadPool.execute(new Runnable() {
- @Override
- public void run() {
- int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue());
- if (ret > 0) {
- // fresh
- freshGroupRegistryInfo(registryParam);
- }
- }
- });
-
- return ReturnT.SUCCESS;
- }
-
- private void freshGroupRegistryInfo(RegistryParam registryParam){
- // Under consideration, prevent affecting core tables
- }
-
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
deleted file mode 100644
index 831bcf6a..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.cron.CronExpression;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum;
-import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author xuxueli 2019-05-21
- */
-public class JobScheduleHelper {
- private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
-
- private static JobScheduleHelper instance = new JobScheduleHelper();
- public static JobScheduleHelper getInstance(){
- return instance;
- }
-
- public static final long PRE_READ_MS = 5000; // pre read
-
- private Thread scheduleThread;
- private Thread ringThread;
- private volatile boolean scheduleThreadToStop = false;
- private volatile boolean ringThreadToStop = false;
- private volatile static Map> ringData = new ConcurrentHashMap<>();
-
- public void start(){
-
- // schedule thread
- scheduleThread = new Thread(new Runnable() {
- @Override
- public void run() {
-
- try {
- TimeUnit.MILLISECONDS.sleep(5000 - System.currentTimeMillis()%1000 );
- } catch (InterruptedException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
-
- // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
- int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
-
- while (!scheduleThreadToStop) {
-
- // Scan Job
- long start = System.currentTimeMillis();
-
- Connection conn = null;
- Boolean connAutoCommit = null;
- PreparedStatement preparedStatement = null;
-
- boolean preReadSuc = true;
- try {
-
- conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
- connAutoCommit = conn.getAutoCommit();
- conn.setAutoCommit(false);
-
- preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
- preparedStatement.execute();
-
- // tx start
-
- // 1、pre read
- long nowTime = System.currentTimeMillis();
- List scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
- if (scheduleList!=null && scheduleList.size()>0) {
- // 2、push time-ring
- for (XxlJobInfo jobInfo: scheduleList) {
-
- // time-ring jump
- if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {
- // 2.1、trigger-expire > 5s:pass && make next-trigger-time
- logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());
-
- // 1、misfire match
- MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
- if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) {
- // FIRE_ONCE_NOW 》 trigger
- JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);
- logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
- }
-
- // 2、fresh next
- refreshNextValidTime(jobInfo, new Date());
-
- } else if (nowTime > jobInfo.getTriggerNextTime()) {
- // 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
-
- // 1、trigger
- JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null, null);
- logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId() );
-
- // 2、fresh next
- refreshNextValidTime(jobInfo, new Date());
-
- // next-trigger-time in 5s, pre-read again
- if (jobInfo.getTriggerStatus()==1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {
-
- // 1、make ring second
- int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
-
- // 2、push time ring
- pushTimeRing(ringSecond, jobInfo.getId());
-
- // 3、fresh next
- refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
-
- }
-
- } else {
- // 2.3、trigger-pre-read:time-ring trigger && make next-trigger-time
-
- // 1、make ring second
- int ringSecond = (int)((jobInfo.getTriggerNextTime()/1000)%60);
-
- // 2、push time ring
- pushTimeRing(ringSecond, jobInfo.getId());
-
- // 3、fresh next
- refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
-
- }
-
- }
-
- // 3、update trigger info
- for (XxlJobInfo jobInfo: scheduleList) {
- XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
- }
-
- } else {
- preReadSuc = false;
- }
-
- // tx stop
-
-
- } catch (Exception e) {
- if (!scheduleThreadToStop) {
- logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e);
- }
- } finally {
-
- // commit
- if (conn != null) {
- try {
- conn.commit();
- } catch (SQLException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- try {
- conn.setAutoCommit(connAutoCommit);
- } catch (SQLException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- try {
- conn.close();
- } catch (SQLException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- }
-
- // close PreparedStatement
- if (null != preparedStatement) {
- try {
- preparedStatement.close();
- } catch (SQLException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- }
- }
- long cost = System.currentTimeMillis()-start;
-
-
- // Wait seconds, align second
- if (cost < 1000) { // scan-overtime, not wait
- try {
- // pre-read period: success > scan each second; fail > skip this period;
- TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:PRE_READ_MS) - System.currentTimeMillis()%1000);
- } catch (InterruptedException e) {
- if (!scheduleThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
- }
-
- }
-
- logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread stop");
- }
- });
- scheduleThread.setDaemon(true);
- scheduleThread.setName("xxl-job, admin JobScheduleHelper#scheduleThread");
- scheduleThread.start();
-
-
- // ring thread
- ringThread = new Thread(new Runnable() {
- @Override
- public void run() {
-
- while (!ringThreadToStop) {
-
- // align second
- try {
- TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis() % 1000);
- } catch (InterruptedException e) {
- if (!ringThreadToStop) {
- logger.error(e.getMessage(), e);
- }
- }
-
- try {
- // second data
- List ringItemData = new ArrayList<>();
- int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
- for (int i = 0; i < 2; i++) {
- List tmpData = ringData.remove( (nowSecond+60-i)%60 );
- if (tmpData != null) {
- ringItemData.addAll(tmpData);
- }
- }
-
- // ring trigger
- logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) );
- if (ringItemData.size() > 0) {
- // do trigger
- for (int jobId: ringItemData) {
- // do trigger
- JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null, null);
- }
- // clear
- ringItemData.clear();
- }
- } catch (Exception e) {
- if (!ringThreadToStop) {
- logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e);
- }
- }
- }
- logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread stop");
- }
- });
- ringThread.setDaemon(true);
- ringThread.setName("xxl-job, admin JobScheduleHelper#ringThread");
- ringThread.start();
- }
-
- private void refreshNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws Exception {
- Date nextValidTime = generateNextValidTime(jobInfo, fromTime);
- if (nextValidTime != null) {
- jobInfo.setTriggerLastTime(jobInfo.getTriggerNextTime());
- jobInfo.setTriggerNextTime(nextValidTime.getTime());
- } else {
- jobInfo.setTriggerStatus(0);
- jobInfo.setTriggerLastTime(0);
- jobInfo.setTriggerNextTime(0);
- logger.warn(">>>>>>>>>>> xxl-job, refreshNextValidTime fail for job: jobId={}, scheduleType={}, scheduleConf={}",
- jobInfo.getId(), jobInfo.getScheduleType(), jobInfo.getScheduleConf());
- }
- }
-
- private void pushTimeRing(int ringSecond, int jobId){
- // push async ring
- List ringItemData = ringData.get(ringSecond);
- if (ringItemData == null) {
- ringItemData = new ArrayList();
- ringData.put(ringSecond, ringItemData);
- }
- ringItemData.add(jobId);
-
- logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData) );
- }
-
- public void toStop(){
-
- // 1、stop schedule
- scheduleThreadToStop = true;
- try {
- TimeUnit.SECONDS.sleep(1); // wait
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- if (scheduleThread.getState() != Thread.State.TERMINATED){
- // interrupt and wait
- scheduleThread.interrupt();
- try {
- scheduleThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
- // if has ring data
- boolean hasRingData = false;
- if (!ringData.isEmpty()) {
- for (int second : ringData.keySet()) {
- List tmpData = ringData.get(second);
- if (tmpData!=null && tmpData.size()>0) {
- hasRingData = true;
- break;
- }
- }
- }
- if (hasRingData) {
- try {
- TimeUnit.SECONDS.sleep(8);
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
- // stop ring (wait job-in-memory stop)
- ringThreadToStop = true;
- try {
- TimeUnit.SECONDS.sleep(1);
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- if (ringThread.getState() != Thread.State.TERMINATED){
- // interrupt and wait
- ringThread.interrupt();
- try {
- ringThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
-
- logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper stop");
- }
-
-
- // ---------------------- tools ----------------------
- public static Date generateNextValidTime(XxlJobInfo jobInfo, Date fromTime) throws Exception {
- ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
- if (ScheduleTypeEnum.CRON == scheduleTypeEnum) {
- Date nextValidTime = new CronExpression(jobInfo.getScheduleConf()).getNextValidTimeAfter(fromTime);
- return nextValidTime;
- } else if (ScheduleTypeEnum.FIX_RATE == scheduleTypeEnum /*|| ScheduleTypeEnum.FIX_DELAY == scheduleTypeEnum*/) {
- return new Date(fromTime.getTime() + Integer.valueOf(jobInfo.getScheduleConf())*1000 );
- }
- return null;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
deleted file mode 100644
index 398713dd..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
+++ /dev/null
@@ -1,150 +0,0 @@
-package com.xxl.job.admin.core.thread;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
-import com.xxl.job.admin.core.trigger.XxlJobTrigger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * job trigger thread pool helper
- *
- * @author xuxueli 2018-07-03 21:08:07
- */
-public class JobTriggerPoolHelper {
- private static Logger logger = LoggerFactory.getLogger(JobTriggerPoolHelper.class);
-
-
- // ---------------------- trigger pool ----------------------
-
- // fast/slow thread pool
- private ThreadPoolExecutor fastTriggerPool = null;
- private ThreadPoolExecutor slowTriggerPool = null;
-
- public void start(){
- fastTriggerPool = new ThreadPoolExecutor(
- 10,
- XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax(),
- 60L,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue(1000),
- new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-" + r.hashCode());
- }
- });
-
- slowTriggerPool = new ThreadPoolExecutor(
- 10,
- XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax(),
- 60L,
- TimeUnit.SECONDS,
- new LinkedBlockingQueue(2000),
- new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-" + r.hashCode());
- }
- });
- }
-
-
- public void stop() {
- //triggerPool.shutdown();
- fastTriggerPool.shutdownNow();
- slowTriggerPool.shutdownNow();
- logger.info(">>>>>>>>> xxl-job trigger thread pool shutdown success.");
- }
-
-
- // job timeout count
- private volatile long minTim = System.currentTimeMillis()/60000; // ms > min
- private volatile ConcurrentMap jobTimeoutCountMap = new ConcurrentHashMap<>();
-
-
- /**
- * add trigger
- */
- public void addTrigger(final int jobId,
- final TriggerTypeEnum triggerType,
- final int failRetryCount,
- final String executorShardingParam,
- final String executorParam,
- final String addressList) {
-
- // choose thread pool
- ThreadPoolExecutor triggerPool_ = fastTriggerPool;
- AtomicInteger jobTimeoutCount = jobTimeoutCountMap.get(jobId);
- if (jobTimeoutCount!=null && jobTimeoutCount.get() > 10) { // job-timeout 10 times in 1 min
- triggerPool_ = slowTriggerPool;
- }
-
- // trigger
- triggerPool_.execute(new Runnable() {
- @Override
- public void run() {
-
- long start = System.currentTimeMillis();
-
- try {
- // do trigger
- XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam, addressList);
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- } finally {
-
- // check timeout-count-map
- long minTim_now = System.currentTimeMillis()/60000;
- if (minTim != minTim_now) {
- minTim = minTim_now;
- jobTimeoutCountMap.clear();
- }
-
- // incr timeout-count-map
- long cost = System.currentTimeMillis()-start;
- if (cost > 500) { // ob-timeout threshold 500ms
- AtomicInteger timeoutCount = jobTimeoutCountMap.putIfAbsent(jobId, new AtomicInteger(1));
- if (timeoutCount != null) {
- timeoutCount.incrementAndGet();
- }
- }
-
- }
-
- }
- });
- }
-
-
-
- // ---------------------- helper ----------------------
-
- private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
-
- public static void toStart() {
- helper.start();
- }
- public static void toStop() {
- helper.stop();
- }
-
- /**
- * @param jobId
- * @param triggerType
- * @param failRetryCount
- * >=0: use this param
- * <0: use param from job info config
- * @param executorShardingParam
- * @param executorParam
- * null: use job param
- * not null: cover job param
- */
- public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam, String addressList) {
- helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam, addressList);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
deleted file mode 100644
index 446c90e9..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/TriggerTypeEnum.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.xxl.job.admin.core.trigger;
-
-import com.xxl.job.admin.core.util.I18nUtil;
-
-/**
- * trigger type enum
- *
- * @author xuxueli 2018-09-16 04:56:41
- */
-public enum TriggerTypeEnum {
-
- MANUAL(I18nUtil.getString("jobconf_trigger_type_manual")),
- CRON(I18nUtil.getString("jobconf_trigger_type_cron")),
- RETRY(I18nUtil.getString("jobconf_trigger_type_retry")),
- PARENT(I18nUtil.getString("jobconf_trigger_type_parent")),
- API(I18nUtil.getString("jobconf_trigger_type_api")),
- MISFIRE(I18nUtil.getString("jobconf_trigger_type_misfire"));
-
- private TriggerTypeEnum(String title){
- this.title = title;
- }
- private String title;
- public String getTitle() {
- return title;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
deleted file mode 100644
index 748befc6..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package com.xxl.job.admin.core.trigger;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLog;
-import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.core.biz.ExecutorBiz;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.biz.model.TriggerParam;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.job.core.util.IpUtil;
-import com.xxl.job.core.util.ThrowableUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-
-/**
- * xxl-job trigger
- * Created by xuxueli on 17/7/13.
- */
-public class XxlJobTrigger {
- private static Logger logger = LoggerFactory.getLogger(XxlJobTrigger.class);
-
- /**
- * trigger job
- *
- * @param jobId
- * @param triggerType
- * @param failRetryCount
- * >=0: use this param
- * <0: use param from job info config
- * @param executorShardingParam
- * @param executorParam
- * null: use job param
- * not null: cover job param
- * @param addressList
- * null: use executor addressList
- * not null: cover
- */
- public static void trigger(int jobId,
- TriggerTypeEnum triggerType,
- int failRetryCount,
- String executorShardingParam,
- String executorParam,
- String addressList) {
-
- // load data
- XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
- if (jobInfo == null) {
- logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId);
- return;
- }
- if (executorParam != null) {
- jobInfo.setExecutorParam(executorParam);
- }
- int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount();
- XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(jobInfo.getJobGroup());
-
- // cover addressList
- if (addressList!=null && addressList.trim().length()>0) {
- group.setAddressType(1);
- group.setAddressList(addressList.trim());
- }
-
- // sharding param
- int[] shardingParam = null;
- if (executorShardingParam!=null){
- String[] shardingArr = executorShardingParam.split("/");
- if (shardingArr.length==2 && isNumeric(shardingArr[0]) && isNumeric(shardingArr[1])) {
- shardingParam = new int[2];
- shardingParam[0] = Integer.valueOf(shardingArr[0]);
- shardingParam[1] = Integer.valueOf(shardingArr[1]);
- }
- }
- if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
- && group.getRegistryList()!=null && !group.getRegistryList().isEmpty()
- && shardingParam==null) {
- for (int i = 0; i < group.getRegistryList().size(); i++) {
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, i, group.getRegistryList().size());
- }
- } else {
- if (shardingParam == null) {
- shardingParam = new int[]{0, 1};
- }
- processTrigger(group, jobInfo, finalFailRetryCount, triggerType, shardingParam[0], shardingParam[1]);
- }
-
- }
-
- private static boolean isNumeric(String str){
- try {
- int result = Integer.valueOf(str);
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
-
- /**
- * @param group job group, registry list may be empty
- * @param jobInfo
- * @param finalFailRetryCount
- * @param triggerType
- * @param index sharding index
- * @param total sharding index
- */
- private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total){
-
- // param
- ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION); // block strategy
- ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
- String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST==executorRouteStrategyEnum)?String.valueOf(index).concat("/").concat(String.valueOf(total)):null;
-
- // 1、save log-id
- XxlJobLog jobLog = new XxlJobLog();
- jobLog.setJobGroup(jobInfo.getJobGroup());
- jobLog.setJobId(jobInfo.getId());
- jobLog.setTriggerTime(new Date());
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog);
- logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
-
- // 2、init trigger-param
- TriggerParam triggerParam = new TriggerParam();
- triggerParam.setJobId(jobInfo.getId());
- triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
- triggerParam.setExecutorParams(jobInfo.getExecutorParam());
- triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
- triggerParam.setExecutorTimeout(jobInfo.getExecutorTimeout());
- triggerParam.setLogId(jobLog.getId());
- triggerParam.setLogDateTime(jobLog.getTriggerTime().getTime());
- triggerParam.setGlueType(jobInfo.getGlueType());
- triggerParam.setGlueSource(jobInfo.getGlueSource());
- triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
- triggerParam.setBroadcastIndex(index);
- triggerParam.setBroadcastTotal(total);
-
- // 3、init address
- String address = null;
- ReturnT routeAddressResult = null;
- if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
- if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum) {
- if (index < group.getRegistryList().size()) {
- address = group.getRegistryList().get(index);
- } else {
- address = group.getRegistryList().get(0);
- }
- } else {
- routeAddressResult = executorRouteStrategyEnum.getRouter().route(triggerParam, group.getRegistryList());
- if (routeAddressResult.getCode() == ReturnT.SUCCESS_CODE) {
- address = routeAddressResult.getContent();
- }
- }
- } else {
- routeAddressResult = new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobconf_trigger_address_empty"));
- }
-
- // 4、trigger remote executor
- ReturnT triggerResult = null;
- if (address != null) {
- triggerResult = runExecutor(triggerParam, address);
- } else {
- triggerResult = new ReturnT(ReturnT.FAIL_CODE, null);
- }
-
- // 5、collection trigger info
- StringBuffer triggerMsgSb = new StringBuffer();
- triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append(":").append(triggerType.getTitle());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":").append(IpUtil.getIp());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append(":")
- .append( (group.getAddressType() == 0)?I18nUtil.getString("jobgroup_field_addressType_0"):I18nUtil.getString("jobgroup_field_addressType_1") );
- triggerMsgSb.append("
").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle());
- if (shardingParam != null) {
- triggerMsgSb.append("("+shardingParam+")");
- }
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
- triggerMsgSb.append("
").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(finalFailRetryCount);
-
- triggerMsgSb.append("
>>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_run") +"<<<<<<<<<<<
")
- .append((routeAddressResult!=null&&routeAddressResult.getMsg()!=null)?routeAddressResult.getMsg()+"
":"").append(triggerResult.getMsg()!=null?triggerResult.getMsg():"");
-
- // 6、save log trigger-info
- jobLog.setExecutorAddress(address);
- jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
- jobLog.setExecutorParam(jobInfo.getExecutorParam());
- jobLog.setExecutorShardingParam(shardingParam);
- jobLog.setExecutorFailRetryCount(finalFailRetryCount);
- //jobLog.setTriggerTime();
- jobLog.setTriggerCode(triggerResult.getCode());
- jobLog.setTriggerMsg(triggerMsgSb.toString());
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);
-
- logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
- }
-
- /**
- * run executor
- * @param triggerParam
- * @param address
- * @return
- */
- public static ReturnT runExecutor(TriggerParam triggerParam, String address){
- ReturnT runResult = null;
- try {
- ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
- runResult = executorBiz.run(triggerParam);
- } catch (Exception e) {
- logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);
- runResult = new ReturnT(ReturnT.FAIL_CODE, ThrowableUtil.toString(e));
- }
-
- StringBuffer runResultSB = new StringBuffer(I18nUtil.getString("jobconf_trigger_run") + ":");
- runResultSB.append("
address:").append(address);
- runResultSB.append("
code:").append(runResult.getCode());
- runResultSB.append("
msg:").append(runResult.getMsg());
-
- runResult.setMsg(runResultSB.toString());
- return runResult;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
deleted file mode 100644
index 34a898f3..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/CookieUtil.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Cookie.Util
- *
- * @author xuxueli 2015-12-12 18:01:06
- */
-public class CookieUtil {
-
- // 默认缓存时间,单位/秒, 2H
- private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
- // 保存路径,根路径
- private static final String COOKIE_PATH = "/";
-
- /**
- * 保存
- *
- * @param response
- * @param key
- * @param value
- * @param ifRemember
- */
- public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) {
- int age = ifRemember?COOKIE_MAX_AGE:-1;
- set(response, key, value, null, COOKIE_PATH, age, true);
- }
-
- /**
- * 保存
- *
- * @param response
- * @param key
- * @param value
- * @param maxAge
- */
- private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
- Cookie cookie = new Cookie(key, value);
- if (domain != null) {
- cookie.setDomain(domain);
- }
- cookie.setPath(path);
- cookie.setMaxAge(maxAge);
- cookie.setHttpOnly(isHttpOnly);
- response.addCookie(cookie);
- }
-
- /**
- * 查询value
- *
- * @param request
- * @param key
- * @return
- */
- public static String getValue(HttpServletRequest request, String key) {
- Cookie cookie = get(request, key);
- if (cookie != null) {
- return cookie.getValue();
- }
- return null;
- }
-
- /**
- * 查询Cookie
- *
- * @param request
- * @param key
- */
- private static Cookie get(HttpServletRequest request, String key) {
- Cookie[] arr_cookie = request.getCookies();
- if (arr_cookie != null && arr_cookie.length > 0) {
- for (Cookie cookie : arr_cookie) {
- if (cookie.getName().equals(key)) {
- return cookie;
- }
- }
- }
- return null;
- }
-
- /**
- * 删除Cookie
- *
- * @param request
- * @param response
- * @param key
- */
- public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
- Cookie cookie = get(request, key);
- if (cookie != null) {
- set(response, key, "", null, COOKIE_PATH, 0, true);
- }
- }
-
-}
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
deleted file mode 100644
index e90af434..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/FtlUtil.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import freemarker.ext.beans.BeansWrapper;
-import freemarker.ext.beans.BeansWrapperBuilder;
-import freemarker.template.Configuration;
-import freemarker.template.TemplateHashModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * ftl util
- *
- * @author xuxueli 2018-01-17 20:37:48
- */
-public class FtlUtil {
- private static Logger logger = LoggerFactory.getLogger(FtlUtil.class);
-
- private static BeansWrapper wrapper = new BeansWrapperBuilder(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build(); //BeansWrapper.getDefaultInstance();
-
- public static TemplateHashModel generateStaticModel(String packageName) {
- try {
- TemplateHashModel staticModels = wrapper.getStaticModels();
- TemplateHashModel fileStatics = (TemplateHashModel) staticModels.get(packageName);
- return fileStatics;
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- }
- return null;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
deleted file mode 100644
index 772a96ec..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.EncodedResource;
-import org.springframework.core.io.support.PropertiesLoaderUtils;
-
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * i18n util
- *
- * @author xuxueli 2018-01-17 20:39:06
- */
-public class I18nUtil {
- private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);
-
- private static Properties prop = null;
- public static Properties loadI18nProp(){
- if (prop != null) {
- return prop;
- }
- try {
- // build i18n prop
- String i18n = XxlJobAdminConfig.getAdminConfig().getI18n();
- String i18nFile = MessageFormat.format("i18n/message_{0}.properties", i18n);
-
- // load prop
- Resource resource = new ClassPathResource(i18nFile);
- EncodedResource encodedResource = new EncodedResource(resource,"UTF-8");
- prop = PropertiesLoaderUtils.loadProperties(encodedResource);
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- }
- return prop;
- }
-
- /**
- * get val of i18n key
- *
- * @param key
- * @return
- */
- public static String getString(String key) {
- return loadI18nProp().getProperty(key);
- }
-
- /**
- * get mult val of i18n mult key, as json
- *
- * @param keys
- * @return
- */
- public static String getMultString(String... keys) {
- Map map = new HashMap();
-
- Properties prop = loadI18nProp();
- if (keys!=null && keys.length>0) {
- for (String key: keys) {
- map.put(key, prop.getProperty(key));
- }
- } else {
- for (String key: prop.stringPropertyNames()) {
- map.put(key, prop.getProperty(key));
- }
- }
-
- String json = JacksonUtil.writeValueAsString(map);
- return json;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
deleted file mode 100644
index 4f4ea3cc..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/JacksonUtil.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-/**
- * Jackson util
- *
- * 1、obj need private and set/get;
- * 2、do not support inner class;
- *
- * @author xuxueli 2015-9-25 18:02:56
- */
-public class JacksonUtil {
- private static Logger logger = LoggerFactory.getLogger(JacksonUtil.class);
-
- private final static ObjectMapper objectMapper = new ObjectMapper();
- public static ObjectMapper getInstance() {
- return objectMapper;
- }
-
- /**
- * bean、array、List、Map --> json
- *
- * @param obj
- * @return json string
- * @throws Exception
- */
- public static String writeValueAsString(Object obj) {
- try {
- return getInstance().writeValueAsString(obj);
- } catch (JsonGenerationException e) {
- logger.error(e.getMessage(), e);
- } catch (JsonMappingException e) {
- logger.error(e.getMessage(), e);
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- }
- return null;
- }
-
- /**
- * string --> bean、Map、List(array)
- *
- * @param jsonStr
- * @param clazz
- * @return obj
- * @throws Exception
- */
- public static T readValue(String jsonStr, Class clazz) {
- try {
- return getInstance().readValue(jsonStr, clazz);
- } catch (JsonParseException e) {
- logger.error(e.getMessage(), e);
- } catch (JsonMappingException e) {
- logger.error(e.getMessage(), e);
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- }
- return null;
- }
-
- /**
- * string --> List...
- *
- * @param jsonStr
- * @param parametrized
- * @param parameterClasses
- * @param
- * @return
- */
- public static T readValue(String jsonStr, Class> parametrized, Class>... parameterClasses) {
- try {
- JavaType javaType = getInstance().getTypeFactory().constructParametricType(parametrized, parameterClasses);
- return getInstance().readValue(jsonStr, javaType);
- } catch (JsonParseException e) {
- logger.error(e.getMessage(), e);
- } catch (JsonMappingException e) {
- logger.error(e.getMessage(), e);
- } catch (IOException e) {
- logger.error(e.getMessage(), e);
- }
- return null;
- }
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
deleted file mode 100644
index fbab0613..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/LocalCacheUtil.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package com.xxl.job.admin.core.util;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * local cache tool
- *
- * @author xuxueli 2018-01-22 21:37:34
- */
-public class LocalCacheUtil {
-
- private static ConcurrentMap cacheRepository = new ConcurrentHashMap(); // 类型建议用抽象父类,兼容性更好;
- private static class LocalCacheData{
- private String key;
- private Object val;
- private long timeoutTime;
-
- public LocalCacheData() {
- }
-
- public LocalCacheData(String key, Object val, long timeoutTime) {
- this.key = key;
- this.val = val;
- this.timeoutTime = timeoutTime;
- }
-
- public String getKey() {
- return key;
- }
-
- public void setKey(String key) {
- this.key = key;
- }
-
- public Object getVal() {
- return val;
- }
-
- public void setVal(Object val) {
- this.val = val;
- }
-
- public long getTimeoutTime() {
- return timeoutTime;
- }
-
- public void setTimeoutTime(long timeoutTime) {
- this.timeoutTime = timeoutTime;
- }
- }
-
-
- /**
- * set cache
- *
- * @param key
- * @param val
- * @param cacheTime
- * @return
- */
- public static boolean set(String key, Object val, long cacheTime){
-
- // clean timeout cache, before set new cache (avoid cache too much)
- cleanTimeoutCache();
-
- // set new cache
- if (key==null || key.trim().length()==0) {
- return false;
- }
- if (val == null) {
- remove(key);
- }
- if (cacheTime <= 0) {
- remove(key);
- }
- long timeoutTime = System.currentTimeMillis() + cacheTime;
- LocalCacheData localCacheData = new LocalCacheData(key, val, timeoutTime);
- cacheRepository.put(localCacheData.getKey(), localCacheData);
- return true;
- }
-
- /**
- * remove cache
- *
- * @param key
- * @return
- */
- public static boolean remove(String key){
- if (key==null || key.trim().length()==0) {
- return false;
- }
- cacheRepository.remove(key);
- return true;
- }
-
- /**
- * get cache
- *
- * @param key
- * @return
- */
- public static Object get(String key){
- if (key==null || key.trim().length()==0) {
- return null;
- }
- LocalCacheData localCacheData = cacheRepository.get(key);
- if (localCacheData!=null && System.currentTimeMillis()=localCacheData.getTimeoutTime()) {
- cacheRepository.remove(key);
- }
- }
- }
- return true;
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
deleted file mode 100644
index b608d9fb..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-@Mapper
-public interface XxlJobGroupDao {
-
- public List findAll();
-
- public List findByAddressType(@Param("addressType") int addressType);
-
- public int save(XxlJobGroup xxlJobGroup);
-
- public int update(XxlJobGroup xxlJobGroup);
-
- public int remove(@Param("id") int id);
-
- public XxlJobGroup load(@Param("id") int id);
-
- public List pageList(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("appname") String appname,
- @Param("title") String title);
-
- public int pageListCount(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("appname") String appname,
- @Param("title") String title);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
deleted file mode 100644
index d640efff..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-
-/**
- * job info
- * @author xuxueli 2016-1-12 18:03:45
- */
-@Mapper
-public interface XxlJobInfoDao {
-
- public List pageList(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("jobGroup") int jobGroup,
- @Param("triggerStatus") int triggerStatus,
- @Param("jobDesc") String jobDesc,
- @Param("executorHandler") String executorHandler,
- @Param("author") String author);
- public int pageListCount(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("jobGroup") int jobGroup,
- @Param("triggerStatus") int triggerStatus,
- @Param("jobDesc") String jobDesc,
- @Param("executorHandler") String executorHandler,
- @Param("author") String author);
-
- public int save(XxlJobInfo info);
-
- public XxlJobInfo loadById(@Param("id") int id);
-
- public int update(XxlJobInfo xxlJobInfo);
-
- public int delete(@Param("id") long id);
-
- public List getJobsByGroup(@Param("jobGroup") int jobGroup);
-
- public int findAllCount();
-
- public List scheduleJobQuery(@Param("maxNextTime") long maxNextTime, @Param("pagesize") int pagesize );
-
- public int scheduleUpdate(XxlJobInfo xxlJobInfo);
-
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
deleted file mode 100644
index 62fa3b4f..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLog;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-/**
- * job log
- * @author xuxueli 2016-1-12 18:03:06
- */
-@Mapper
-public interface XxlJobLogDao {
-
- // exist jobId not use jobGroup, not exist use jobGroup
- public List pageList(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("jobGroup") int jobGroup,
- @Param("jobId") int jobId,
- @Param("triggerTimeStart") Date triggerTimeStart,
- @Param("triggerTimeEnd") Date triggerTimeEnd,
- @Param("logStatus") int logStatus);
- public int pageListCount(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("jobGroup") int jobGroup,
- @Param("jobId") int jobId,
- @Param("triggerTimeStart") Date triggerTimeStart,
- @Param("triggerTimeEnd") Date triggerTimeEnd,
- @Param("logStatus") int logStatus);
-
- public XxlJobLog load(@Param("id") long id);
-
- public long save(XxlJobLog xxlJobLog);
-
- public int updateTriggerInfo(XxlJobLog xxlJobLog);
-
- public int updateHandleInfo(XxlJobLog xxlJobLog);
-
- public int delete(@Param("jobId") int jobId);
-
- public Map findLogReport(@Param("from") Date from,
- @Param("to") Date to);
-
- public List findClearLogIds(@Param("jobGroup") int jobGroup,
- @Param("jobId") int jobId,
- @Param("clearBeforeTime") Date clearBeforeTime,
- @Param("clearBeforeNum") int clearBeforeNum,
- @Param("pagesize") int pagesize);
- public int clearLog(@Param("logIds") List logIds);
-
- public List findFailJobLogIds(@Param("pagesize") int pagesize);
-
- public int updateAlarmStatus(@Param("logId") long logId,
- @Param("oldAlarmStatus") int oldAlarmStatus,
- @Param("newAlarmStatus") int newAlarmStatus);
-
- public List findLostJobIds(@Param("losedTime") Date losedTime);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
deleted file mode 100644
index 3028aed2..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLogGlue;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * job log for glue
- * @author xuxueli 2016-5-19 18:04:56
- */
-@Mapper
-public interface XxlJobLogGlueDao {
-
- public int save(XxlJobLogGlue xxlJobLogGlue);
-
- public List findByJobId(@Param("jobId") int jobId);
-
- public int removeOld(@Param("jobId") int jobId, @Param("limit") int limit);
-
- public int deleteByJobId(@Param("jobId") int jobId);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
deleted file mode 100644
index f4b3dc81..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogReportDao.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * job log
- * @author xuxueli 2019-11-22
- */
-@Mapper
-public interface XxlJobLogReportDao {
-
- public int save(XxlJobLogReport xxlJobLogReport);
-
- public int update(XxlJobLogReport xxlJobLogReport);
-
- public List queryLogReport(@Param("triggerDayFrom") Date triggerDayFrom,
- @Param("triggerDayTo") Date triggerDayTo);
-
- public XxlJobLogReport queryLogReportTotal();
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
deleted file mode 100644
index 1005c46c..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobRegistry;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * Created by xuxueli on 16/9/30.
- */
-@Mapper
-public interface XxlJobRegistryDao {
-
- public List findDead(@Param("timeout") int timeout,
- @Param("nowTime") Date nowTime);
-
- public int removeDead(@Param("ids") List ids);
-
- public List findAll(@Param("timeout") int timeout,
- @Param("nowTime") Date nowTime);
-
- public int registryUpdate(@Param("registryGroup") String registryGroup,
- @Param("registryKey") String registryKey,
- @Param("registryValue") String registryValue,
- @Param("updateTime") Date updateTime);
-
- public int registrySave(@Param("registryGroup") String registryGroup,
- @Param("registryKey") String registryKey,
- @Param("registryValue") String registryValue,
- @Param("updateTime") Date updateTime);
-
- public int registryDelete(@Param("registryGroup") String registryGroup,
- @Param("registryKey") String registryKey,
- @Param("registryValue") String registryValue);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
deleted file mode 100644
index e8404947..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobUserDao.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.xxl.job.admin.dao;
-
-import com.xxl.job.admin.core.model.XxlJobUser;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import java.util.List;
-
-/**
- * @author xuxueli 2019-05-04 16:44:59
- */
-@Mapper
-public interface XxlJobUserDao {
-
- public List pageList(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("username") String username,
- @Param("role") int role);
- public int pageListCount(@Param("offset") int offset,
- @Param("pagesize") int pagesize,
- @Param("username") String username,
- @Param("role") int role);
-
- public XxlJobUser loadByUserName(@Param("username") String username);
-
- public int save(XxlJobUser xxlJobUser);
-
- public int update(XxlJobUser xxlJobUser);
-
- public int delete(@Param("id") int id);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/LoginService.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
deleted file mode 100644
index e1cf2e44..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/LoginService.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.xxl.job.admin.service;
-
-import com.xxl.job.admin.core.model.XxlJobUser;
-import com.xxl.job.admin.core.util.CookieUtil;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.core.util.JacksonUtil;
-import com.xxl.job.admin.dao.XxlJobUserDao;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.DigestUtils;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.math.BigInteger;
-
-/**
- * @author xuxueli 2019-05-04 22:13:264
- */
-@Configuration
-public class LoginService {
-
- public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
-
- @Resource
- private XxlJobUserDao xxlJobUserDao;
-
-
- private String makeToken(XxlJobUser xxlJobUser){
- String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
- String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
- return tokenHex;
- }
- private XxlJobUser parseToken(String tokenHex){
- XxlJobUser xxlJobUser = null;
- if (tokenHex != null) {
- String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray()); // username_password(md5)
- xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
- }
- return xxlJobUser;
- }
-
-
- public ReturnT login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember){
-
- // param
- if (username==null || username.trim().length()==0 || password==null || password.trim().length()==0){
- return new ReturnT(500, I18nUtil.getString("login_param_empty"));
- }
-
- // valid passowrd
- XxlJobUser xxlJobUser = xxlJobUserDao.loadByUserName(username);
- if (xxlJobUser == null) {
- return new ReturnT(500, I18nUtil.getString("login_param_unvalid"));
- }
- String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
- if (!passwordMd5.equals(xxlJobUser.getPassword())) {
- return new ReturnT(500, I18nUtil.getString("login_param_unvalid"));
- }
-
- String loginToken = makeToken(xxlJobUser);
-
- // do login
- CookieUtil.set(response, LOGIN_IDENTITY_KEY, loginToken, ifRemember);
- return ReturnT.SUCCESS;
- }
-
- /**
- * logout
- *
- * @param request
- * @param response
- */
- public ReturnT logout(HttpServletRequest request, HttpServletResponse response){
- CookieUtil.remove(request, response, LOGIN_IDENTITY_KEY);
- return ReturnT.SUCCESS;
- }
-
- /**
- * logout
- *
- * @param request
- * @return
- */
- public XxlJobUser ifLogin(HttpServletRequest request, HttpServletResponse response){
- String cookieToken = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
- if (cookieToken != null) {
- XxlJobUser cookieUser = null;
- try {
- cookieUser = parseToken(cookieToken);
- } catch (Exception e) {
- logout(request, response);
- }
- if (cookieUser != null) {
- XxlJobUser dbUser = xxlJobUserDao.loadByUserName(cookieUser.getUsername());
- if (dbUser != null) {
- if (cookieUser.getPassword().equals(dbUser.getPassword())) {
- return dbUser;
- }
- }
- }
- }
- return null;
- }
-
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
deleted file mode 100644
index 61da3a27..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/XxlJobService.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package com.xxl.job.admin.service;
-
-
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.core.biz.model.ReturnT;
-
-import java.util.Date;
-import java.util.Map;
-
-/**
- * core job action for xxl-job
- *
- * @author xuxueli 2016-5-28 15:30:33
- */
-public interface XxlJobService {
-
- /**
- * page list
- *
- * @param start
- * @param length
- * @param jobGroup
- * @param jobDesc
- * @param executorHandler
- * @param author
- * @return
- */
- public Map pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author);
-
- /**
- * add job
- *
- * @param jobInfo
- * @return
- */
- public ReturnT add(XxlJobInfo jobInfo);
-
- /**
- * update job
- *
- * @param jobInfo
- * @return
- */
- public ReturnT update(XxlJobInfo jobInfo);
-
- /**
- * remove job
- * *
- * @param id
- * @return
- */
- public ReturnT remove(int id);
-
- /**
- * start job
- *
- * @param id
- * @return
- */
- public ReturnT start(int id);
-
- /**
- * stop job
- *
- * @param id
- * @return
- */
- public ReturnT stop(int id);
-
- /**
- * dashboard info
- *
- * @return
- */
- public Map dashboardInfo();
-
- /**
- * chart info
- *
- * @param startDate
- * @param endDate
- * @return
- */
- public ReturnT> chartInfo(Date startDate, Date endDate);
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
deleted file mode 100644
index 3c01e94d..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.xxl.job.admin.service.impl;
-
-import com.xxl.job.admin.core.thread.JobCompleteHelper;
-import com.xxl.job.admin.core.thread.JobRegistryHelper;
-import com.xxl.job.core.biz.AdminBiz;
-import com.xxl.job.core.biz.model.HandleCallbackParam;
-import com.xxl.job.core.biz.model.RegistryParam;
-import com.xxl.job.core.biz.model.ReturnT;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author xuxueli 2017-07-27 21:54:20
- */
-@Service
-public class AdminBizImpl implements AdminBiz {
-
-
- @Override
- public ReturnT callback(List callbackParamList) {
- return JobCompleteHelper.getInstance().callback(callbackParamList);
- }
-
- @Override
- public ReturnT registry(RegistryParam registryParam) {
- return JobRegistryHelper.getInstance().registry(registryParam);
- }
-
- @Override
- public ReturnT registryRemove(RegistryParam registryParam) {
- return JobRegistryHelper.getInstance().registryRemove(registryParam);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
deleted file mode 100644
index 530ee41c..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+++ /dev/null
@@ -1,434 +0,0 @@
-package com.xxl.job.admin.service.impl;
-
-import com.xxl.job.admin.core.cron.CronExpression;
-import com.xxl.job.admin.core.model.XxlJobGroup;
-import com.xxl.job.admin.core.model.XxlJobInfo;
-import com.xxl.job.admin.core.model.XxlJobLogReport;
-import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
-import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum;
-import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum;
-import com.xxl.job.admin.core.thread.JobScheduleHelper;
-import com.xxl.job.admin.core.util.I18nUtil;
-import com.xxl.job.admin.dao.*;
-import com.xxl.job.admin.service.XxlJobService;
-import com.xxl.job.core.biz.model.ReturnT;
-import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
-import com.xxl.job.core.glue.GlueTypeEnum;
-import com.xxl.job.core.util.DateUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.text.MessageFormat;
-import java.util.*;
-
-/**
- * core job action for xxl-job
- * @author xuxueli 2016-5-28 15:30:33
- */
-@Service
-public class XxlJobServiceImpl implements XxlJobService {
- private static Logger logger = LoggerFactory.getLogger(XxlJobServiceImpl.class);
-
- @Resource
- private XxlJobGroupDao xxlJobGroupDao;
- @Resource
- private XxlJobInfoDao xxlJobInfoDao;
- @Resource
- public XxlJobLogDao xxlJobLogDao;
- @Resource
- private XxlJobLogGlueDao xxlJobLogGlueDao;
- @Resource
- private XxlJobLogReportDao xxlJobLogReportDao;
-
- @Override
- public Map pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
-
- // page list
- List list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
- int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
-
- // package result
- Map maps = new HashMap();
- maps.put("recordsTotal", list_count); // 总记录数
- maps.put("recordsFiltered", list_count); // 过滤后的总记录数
- maps.put("data", list); // 分页列表
- return maps;
- }
-
- @Override
- public ReturnT add(XxlJobInfo jobInfo) {
-
- // valid base
- XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());
- if (group == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) );
- }
- if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
- }
- if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
- }
-
- // valid trigger
- ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
- if (scheduleTypeEnum == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {
- if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {
- return new ReturnT(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid"));
- }
- } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {
- if (jobInfo.getScheduleConf() == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")) );
- }
- try {
- int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());
- if (fixSecond < 1) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- } catch (Exception e) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- }
-
- // valid job
- if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );
- }
- if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") );
- }
- // 》fix "\r" in shell
- if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) {
- jobInfo.setGlueSource(jobInfo.getGlueSource().replaceAll("\r", ""));
- }
-
- // valid advanced
- if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
- }
- if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) );
- }
- if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
- }
-
- // 》ChildJobId valid
- if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
- String[] childJobIds = jobInfo.getChildJobId().split(",");
- for (String childJobIdItem: childJobIds) {
- if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
- XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
- if (childJobInfo==null) {
- return new ReturnT(ReturnT.FAIL_CODE,
- MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
- }
- } else {
- return new ReturnT(ReturnT.FAIL_CODE,
- MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
- }
- }
-
- // join , avoid "xxx,,"
- String temp = "";
- for (String item:childJobIds) {
- temp += item + ",";
- }
- temp = temp.substring(0, temp.length()-1);
-
- jobInfo.setChildJobId(temp);
- }
-
- // add in db
- jobInfo.setAddTime(new Date());
- jobInfo.setUpdateTime(new Date());
- jobInfo.setGlueUpdatetime(new Date());
- xxlJobInfoDao.save(jobInfo);
- if (jobInfo.getId() < 1) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) );
- }
-
- return new ReturnT(String.valueOf(jobInfo.getId()));
- }
-
- private boolean isNumeric(String str){
- try {
- int result = Integer.valueOf(str);
- return true;
- } catch (NumberFormatException e) {
- return false;
- }
- }
-
- @Override
- public ReturnT update(XxlJobInfo jobInfo) {
-
- // valid base
- if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );
- }
- if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );
- }
-
- // valid trigger
- ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
- if (scheduleTypeEnum == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {
- if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {
- return new ReturnT(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid") );
- }
- } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE /*|| scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {
- if (jobInfo.getScheduleConf() == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- try {
- int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());
- if (fixSecond < 1) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- } catch (Exception e) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- }
-
- // valid advanced
- if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );
- }
- if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) );
- }
- if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );
- }
-
- // 》ChildJobId valid
- if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {
- String[] childJobIds = jobInfo.getChildJobId().split(",");
- for (String childJobIdItem: childJobIds) {
- if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {
- XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
- if (childJobInfo==null) {
- return new ReturnT(ReturnT.FAIL_CODE,
- MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));
- }
- } else {
- return new ReturnT(ReturnT.FAIL_CODE,
- MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));
- }
- }
-
- // join , avoid "xxx,,"
- String temp = "";
- for (String item:childJobIds) {
- temp += item + ",";
- }
- temp = temp.substring(0, temp.length()-1);
-
- jobInfo.setChildJobId(temp);
- }
-
- // group valid
- XxlJobGroup jobGroup = xxlJobGroupDao.load(jobInfo.getJobGroup());
- if (jobGroup == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup")+I18nUtil.getString("system_unvalid")) );
- }
-
- // stage job info
- XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(jobInfo.getId());
- if (exists_jobInfo == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id")+I18nUtil.getString("system_not_found")) );
- }
-
- // next trigger time (5s后生效,避开预读周期)
- long nextTriggerTime = exists_jobInfo.getTriggerNextTime();
- boolean scheduleDataNotChanged = jobInfo.getScheduleType().equals(exists_jobInfo.getScheduleType()) && jobInfo.getScheduleConf().equals(exists_jobInfo.getScheduleConf());
- if (exists_jobInfo.getTriggerStatus() == 1 && !scheduleDataNotChanged) {
- try {
- Date nextValidTime = JobScheduleHelper.generateNextValidTime(jobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
- if (nextValidTime == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- nextTriggerTime = nextValidTime.getTime();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- }
-
- exists_jobInfo.setJobGroup(jobInfo.getJobGroup());
- exists_jobInfo.setJobDesc(jobInfo.getJobDesc());
- exists_jobInfo.setAuthor(jobInfo.getAuthor());
- exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail());
- exists_jobInfo.setScheduleType(jobInfo.getScheduleType());
- exists_jobInfo.setScheduleConf(jobInfo.getScheduleConf());
- exists_jobInfo.setMisfireStrategy(jobInfo.getMisfireStrategy());
- exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy());
- exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler());
- exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam());
- exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
- exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
- exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
- exists_jobInfo.setChildJobId(jobInfo.getChildJobId());
- exists_jobInfo.setTriggerNextTime(nextTriggerTime);
-
- exists_jobInfo.setUpdateTime(new Date());
- xxlJobInfoDao.update(exists_jobInfo);
-
-
- return ReturnT.SUCCESS;
- }
-
- @Override
- public ReturnT remove(int id) {
- XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
- if (xxlJobInfo == null) {
- return ReturnT.SUCCESS;
- }
-
- xxlJobInfoDao.delete(id);
- xxlJobLogDao.delete(id);
- xxlJobLogGlueDao.deleteByJobId(id);
- return ReturnT.SUCCESS;
- }
-
- @Override
- public ReturnT start(int id) {
- XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
-
- // valid
- ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(xxlJobInfo.getScheduleType(), ScheduleTypeEnum.NONE);
- if (ScheduleTypeEnum.NONE == scheduleTypeEnum) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type_none_limit_start")) );
- }
-
- // next trigger time (5s后生效,避开预读周期)
- long nextTriggerTime = 0;
- try {
- Date nextValidTime = JobScheduleHelper.generateNextValidTime(xxlJobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
- if (nextValidTime == null) {
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
- nextTriggerTime = nextValidTime.getTime();
- } catch (Exception e) {
- logger.error(e.getMessage(), e);
- return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );
- }
-
- xxlJobInfo.setTriggerStatus(1);
- xxlJobInfo.setTriggerLastTime(0);
- xxlJobInfo.setTriggerNextTime(nextTriggerTime);
-
- xxlJobInfo.setUpdateTime(new Date());
- xxlJobInfoDao.update(xxlJobInfo);
- return ReturnT.SUCCESS;
- }
-
- @Override
- public ReturnT stop(int id) {
- XxlJobInfo xxlJobInfo = xxlJobInfoDao.loadById(id);
-
- xxlJobInfo.setTriggerStatus(0);
- xxlJobInfo.setTriggerLastTime(0);
- xxlJobInfo.setTriggerNextTime(0);
-
- xxlJobInfo.setUpdateTime(new Date());
- xxlJobInfoDao.update(xxlJobInfo);
- return ReturnT.SUCCESS;
- }
-
- @Override
- public Map dashboardInfo() {
-
- int jobInfoCount = xxlJobInfoDao.findAllCount();
- int jobLogCount = 0;
- int jobLogSuccessCount = 0;
- XxlJobLogReport xxlJobLogReport = xxlJobLogReportDao.queryLogReportTotal();
- if (xxlJobLogReport != null) {
- jobLogCount = xxlJobLogReport.getRunningCount() + xxlJobLogReport.getSucCount() + xxlJobLogReport.getFailCount();
- jobLogSuccessCount = xxlJobLogReport.getSucCount();
- }
-
- // executor count
- Set executorAddressSet = new HashSet();
- List groupList = xxlJobGroupDao.findAll();
-
- if (groupList!=null && !groupList.isEmpty()) {
- for (XxlJobGroup group: groupList) {
- if (group.getRegistryList()!=null && !group.getRegistryList().isEmpty()) {
- executorAddressSet.addAll(group.getRegistryList());
- }
- }
- }
-
- int executorCount = executorAddressSet.size();
-
- Map dashboardMap = new HashMap();
- dashboardMap.put("jobInfoCount", jobInfoCount);
- dashboardMap.put("jobLogCount", jobLogCount);
- dashboardMap.put("jobLogSuccessCount", jobLogSuccessCount);
- dashboardMap.put("executorCount", executorCount);
- return dashboardMap;
- }
-
- @Override
- public ReturnT> chartInfo(Date startDate, Date endDate) {
-
- // process
- List triggerDayList = new ArrayList();
- List triggerDayCountRunningList = new ArrayList();
- List triggerDayCountSucList = new ArrayList();
- List triggerDayCountFailList = new ArrayList();
- int triggerCountRunningTotal = 0;
- int triggerCountSucTotal = 0;
- int triggerCountFailTotal = 0;
-
- List logReportList = xxlJobLogReportDao.queryLogReport(startDate, endDate);
-
- if (logReportList!=null && logReportList.size()>0) {
- for (XxlJobLogReport item: logReportList) {
- String day = DateUtil.formatDate(item.getTriggerDay());
- int triggerDayCountRunning = item.getRunningCount();
- int triggerDayCountSuc = item.getSucCount();
- int triggerDayCountFail = item.getFailCount();
-
- triggerDayList.add(day);
- triggerDayCountRunningList.add(triggerDayCountRunning);
- triggerDayCountSucList.add(triggerDayCountSuc);
- triggerDayCountFailList.add(triggerDayCountFail);
-
- triggerCountRunningTotal += triggerDayCountRunning;
- triggerCountSucTotal += triggerDayCountSuc;
- triggerCountFailTotal += triggerDayCountFail;
- }
- } else {
- for (int i = -6; i <= 0; i++) {
- triggerDayList.add(DateUtil.formatDate(DateUtil.addDays(new Date(), i)));
- triggerDayCountRunningList.add(0);
- triggerDayCountSucList.add(0);
- triggerDayCountFailList.add(0);
- }
- }
-
- Map result = new HashMap();
- result.put("triggerDayList", triggerDayList);
- result.put("triggerDayCountRunningList", triggerDayCountRunningList);
- result.put("triggerDayCountSucList", triggerDayCountSucList);
- result.put("triggerDayCountFailList", triggerDayCountFailList);
-
- result.put("triggerCountRunningTotal", triggerCountRunningTotal);
- result.put("triggerCountSucTotal", triggerCountSucTotal);
- result.put("triggerCountFailTotal", triggerCountFailTotal);
-
- return new ReturnT>(result);
- }
-
-}
diff --git a/com.xuxueli.xxl-job-admin/src/main/resources/application.properties b/com.xuxueli.xxl-job-admin/src/main/resources/application.properties
deleted file mode 100644
index 8727b6c7..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/resources/application.properties
+++ /dev/null
@@ -1,65 +0,0 @@
-### web
-server.port=8080
-server.servlet.context-path=/xxl-job-admin
-
-### actuator
-management.server.servlet.context-path=/actuator
-management.health.mail.enabled=false
-
-### resources
-spring.mvc.servlet.load-on-startup=0
-spring.mvc.static-path-pattern=/static/**
-spring.resources.static-locations=classpath:/static/
-
-### freemarker
-spring.freemarker.templateLoaderPath=classpath:/templates/
-spring.freemarker.suffix=.ftl
-spring.freemarker.charset=UTF-8
-spring.freemarker.request-context-attribute=request
-spring.freemarker.settings.number_format=0.##########
-
-### mybatis
-mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
-#mybatis.type-aliases-package=com.xxl.job.admin.core.model
-
-### xxl-job, datasource
-spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
-spring.datasource.username=root
-spring.datasource.password=root_pwd
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-
-### datasource-pool
-spring.datasource.type=com.zaxxer.hikari.HikariDataSource
-spring.datasource.hikari.minimum-idle=10
-spring.datasource.hikari.maximum-pool-size=30
-spring.datasource.hikari.auto-commit=true
-spring.datasource.hikari.idle-timeout=30000
-spring.datasource.hikari.pool-name=HikariCP
-spring.datasource.hikari.max-lifetime=900000
-spring.datasource.hikari.connection-timeout=10000
-spring.datasource.hikari.connection-test-query=SELECT 1
-spring.datasource.hikari.validation-timeout=1000
-
-### xxl-job, email
-spring.mail.host=smtp.qq.com
-spring.mail.port=25
-spring.mail.username=xxx@qq.com
-spring.mail.from=xxx@qq.com
-spring.mail.password=xxx
-spring.mail.properties.mail.smtp.auth=true
-spring.mail.properties.mail.smtp.starttls.enable=true
-spring.mail.properties.mail.smtp.starttls.required=true
-spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
-
-### xxl-job, access token
-xxl.job.accessToken=default_token
-
-### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
-xxl.job.i18n=zh_CN
-
-## xxl-job, triggerpool max size
-xxl.job.triggerpool.fast.max=200
-xxl.job.triggerpool.slow.max=100
-
-### xxl-job, log retention days
-xxl.job.logretentiondays=30
diff --git a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_en.properties b/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_en.properties
deleted file mode 100644
index 2ca59155..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_en.properties
+++ /dev/null
@@ -1,276 +0,0 @@
-admin_name=Scheduling Center
-admin_name_full=Distributed Task Scheduling Platform XXL-JOB
-admin_version=2.4.1-SNAPSHOT
-admin_i18n=en
-
-## system
-system_tips=System message
-system_ok=Confirm
-system_close=Close
-system_save=Save
-system_cancel=Cancel
-system_search=Search
-system_status=Status
-system_opt=Operate
-system_please_input=please input
-system_please_choose=please choose
-system_success=success
-system_fail=fail
-system_add_suc=add success
-system_add_fail=add fail
-system_update_suc=update success
-system_update_fail=update fail
-system_all=All
-system_api_error=net error
-system_show=Show
-system_empty=Empty
-system_opt_suc=operate success
-system_opt_fail=operate fail
-system_opt_edit=Edit
-system_opt_del=Delete
-system_opt_copy=Copy
-system_unvalid=illegal
-system_not_found=not exist
-system_nav=Navigation
-system_digits=digits
-system_lengh_limit=Length limit
-system_permission_limit=Permission limit
-system_welcome=Welcome
-
-## daterangepicker
-daterangepicker_ranges_recent_hour=recent one hour
-daterangepicker_ranges_today=today
-daterangepicker_ranges_yesterday=yesterday
-daterangepicker_ranges_this_month=this month
-daterangepicker_ranges_last_month=last month
-daterangepicker_ranges_recent_week=recent one week
-daterangepicker_ranges_recent_month=recent one month
-daterangepicker_custom_name=custom
-daterangepicker_custom_starttime=start time
-daterangepicker_custom_endtime=end time
-daterangepicker_custom_daysofweek=Sun,Mon,Tue,Wed,Thu,Fri,Sat
-daterangepicker_custom_monthnames=Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
-
-## dataTable
-dataTable_sProcessing=processing...
-dataTable_sLengthMenu= _MENU_ records per page
-dataTable_sZeroRecords=No matching results
-dataTable_sInfo=page _PAGE_ ( Total _PAGES_ pages,_TOTAL_ records )
-dataTable_sInfoEmpty=No Record
-dataTable_sInfoFiltered=(Filtered by _MAX_ results)
-dataTable_sSearch=Search
-dataTable_sEmptyTable=Table data is empty
-dataTable_sLoadingRecords=Loading...
-dataTable_sFirst=FIRST PAGE
-dataTable_sPrevious=Previous Page
-dataTable_sNext=Next Page
-dataTable_sLast=LAST PAGE
-dataTable_sSortAscending=: Rank this column in ascending order
-dataTable_sSortDescending=: Rank this column in descending order
-
-## login
-login_btn=Login
-login_remember_me=Remember Me
-login_username_placeholder=Please enter username
-login_password_placeholder=Please enter password
-login_username_empty=Please enter username
-login_username_lt_4=Username length should not be less than 4
-login_password_empty=Please enter password
-login_password_lt_4=Password length should not be less than 4
-login_success=Login success
-login_fail=Login fail
-login_param_empty=Username or password is empty
-login_param_unvalid=Username or password error
-
-## logout
-logout_btn=Logout
-logout_confirm=Confirm logout?
-logout_success=Logout success
-logout_fail=Logout fail
-
-## change pwd
-change_pwd=Change password
-change_pwd_suc_to_logout=Change password successful, about to log out login
-change_pwd_field_newpwd=new password
-
-## dashboard
-job_dashboard_name=Run report
-job_dashboard_job_num=Job number
-job_dashboard_job_num_tip=The number of tasks running in the scheduling center
-job_dashboard_trigger_num=trigger number
-job_dashboard_trigger_num_tip=The number of trigger record scheduled by the scheduling center
-job_dashboard_jobgroup_num=Executor number
-job_dashboard_jobgroup_num_tip=The number of online executor machines perceived by the scheduling center
-job_dashboard_report=Scheduling report
-job_dashboard_report_loaddata_fail=Scheduling report load data error
-job_dashboard_date_report=Date distribution
-job_dashboard_rate_report=Percentage distribution
-
-## job info
-jobinfo_name=Job Manage
-jobinfo_job=Job
-jobinfo_field_add=Add Job
-jobinfo_field_update=Edit Job
-jobinfo_field_id=Job ID
-jobinfo_field_jobgroup=Executor
-jobinfo_field_jobdesc=Job description
-jobinfo_field_timeout=Job timeout period
-jobinfo_field_gluetype=GLUE Type
-jobinfo_field_executorparam=Param
-jobinfo_field_author=Author
-jobinfo_field_alarmemail=Alarm email
-jobinfo_field_alarmemail_placeholder=Please enter alarm mail, if there are more than one comma separated
-jobinfo_field_executorRouteStrategy=Route Strategy
-jobinfo_field_childJobId=Child Job ID
-jobinfo_field_childJobId_placeholder=Please enter the Child job ID, if there are more than one comma separated
-jobinfo_field_executorBlockStrategy=Block Strategy
-jobinfo_field_executorFailRetryCount=Fail Retry Count
-jobinfo_field_executorFailRetryCount_placeholder=Fail Retry Count. effect if greater than zero
-jobinfo_script_location=Script location
-jobinfo_shard_index=Shard index
-jobinfo_shard_total=Shard total
-jobinfo_opt_stop=Stop
-jobinfo_opt_start=Start
-jobinfo_opt_log=Query Log
-jobinfo_opt_run=Run Once
-jobinfo_opt_run_tips=Please input the address for this trigger. Null will be obtained from the executor
-jobinfo_opt_registryinfo=Registry Info
-jobinfo_opt_next_time=Next trigger time
-jobinfo_glue_remark=Resource Remark
-jobinfo_glue_remark_limit=Resource Remark length is limited to 4~100
-jobinfo_glue_rollback=Version Backtrack
-jobinfo_glue_jobid_unvalid=Job ID is illegal
-jobinfo_glue_gluetype_unvalid=The job is not GLUE Type
-jobinfo_field_executorTimeout_placeholder=Job Timeout period,in seconds. effect if greater than zero
-schedule_type=Schedule Type
-schedule_type_none=None
-schedule_type_cron=Cron
-schedule_type_fix_rate=Fix rate
-schedule_type_fix_delay=Fix delay
-schedule_type_none_limit_start=The current schedule type disables startup
-misfire_strategy=Misfire strategy
-misfire_strategy_do_nothing=Do nothing
-misfire_strategy_fire_once_now=Fire once now
-jobinfo_conf_base=Base configuration
-jobinfo_conf_schedule=Schedule configuration
-jobinfo_conf_job=Job configuration
-jobinfo_conf_advanced=Advanced configuration
-
-## job log
-joblog_name=Trigger Log
-joblog_status=Status
-joblog_status_all=All
-joblog_status_suc=Success
-joblog_status_fail=Fail
-joblog_status_running=Running
-joblog_field_triggerTime=Trigger Time
-joblog_field_triggerCode=Trigger Result
-joblog_field_triggerMsg=Trigger Msg
-joblog_field_handleTime=Handle Time
-joblog_field_handleCode=Handle Result
-joblog_field_handleMsg=Trigger Msg
-joblog_field_executorAddress=Executor Address
-joblog_clean=Clean
-joblog_clean_log=Clean Log
-joblog_clean_type=Clean Type
-joblog_clean_type_1=Clean up log data a month ago
-joblog_clean_type_2=Clean up log data three month ago
-joblog_clean_type_3=Clean up log data six month ago
-joblog_clean_type_4=Clean up log data a year ago
-joblog_clean_type_5=Clean up log data a thousand record ago
-joblog_clean_type_6=Clean up log data ten thousand record ago
-joblog_clean_type_7=Clean up log data thirty thousand record ago
-joblog_clean_type_8=Clean up log data hundred thousand record ago
-joblog_clean_type_9=Clean up all log data
-joblog_clean_type_unvalid=Clean type is illegal
-joblog_handleCode_200=Success
-joblog_handleCode_500=Fail
-joblog_handleCode_502=Timeout
-joblog_kill_log=Kill Job
-joblog_kill_log_limit=Trigger Fail, can not kill job
-joblog_kill_log_byman=Manual operation, kill job
-joblog_lost_fail=Job result lost, marked as failure
-joblog_rolling_log=Rolling log
-joblog_rolling_log_refresh=Refresh
-joblog_rolling_log_triggerfail=The job trigger fail, can not view the rolling log
-joblog_rolling_log_failoften=The request for the Rolling log is terminated, the number of failed requests exceeds the limit, Reload the log on the refresh page
-joblog_logid_unvalid=Log ID is illegal
-
-## job group
-jobgroup_name=Executor Manage
-jobgroup_list=Executor List
-jobgroup_add=Add Executor
-jobgroup_edit=Edit Executor
-jobgroup_del=Delete Executor
-jobgroup_field_title=Title
-jobgroup_field_addressType=Registry Type
-jobgroup_field_addressType_0=Automatic registration
-jobgroup_field_addressType_1=Manual registration
-jobgroup_field_addressType_limit=Manually registration type, the machine address must not be empty
-jobgroup_field_registryList=machine address
-jobgroup_field_registryList_unvalid=registry machine address is illegal
-jobgroup_field_registryList_placeholder=Please enter the machine address, if there are more than one comma separated
-jobgroup_field_appname_limit=Limit the beginning of a lowercase letter, consists of lowercase letters、number and hyphen.
-jobgroup_field_appname_length=AppName length is limited to 4~64
-jobgroup_field_title_length=Title length is limited to 4~12
-jobgroup_field_order_digits=Please enter a positive integer
-jobgroup_field_orderrange=Order is limited to 1~1000
-jobgroup_del_limit_0=Refuse to delete, the executor is being used
-jobgroup_del_limit_1=Refuses to delete, the system retains at least one executor
-jobgroup_empty=There is no valid executor. Please contact the administrator
-
-## job conf
-jobconf_block_SERIAL_EXECUTION=Serial execution
-jobconf_block_DISCARD_LATER=Discard Later
-jobconf_block_COVER_EARLY=Cover Early
-jobconf_route_first=First
-jobconf_route_last=Last
-jobconf_route_round=Round
-jobconf_route_random=Random
-jobconf_route_consistenthash=Consistent Hash
-jobconf_route_lfu=Least Frequently Used
-jobconf_route_lru=Least Recently Used
-jobconf_route_failover=Failover
-jobconf_route_busyover=Busyover
-jobconf_route_shard=Sharding Broadcast
-jobconf_idleBeat=Idle check
-jobconf_beat=Heartbeats
-jobconf_monitor=Task Scheduling Center monitor alarm
-jobconf_monitor_detail=monitor alarm details
-jobconf_monitor_alarm_title=Alarm Type
-jobconf_monitor_alarm_type=Trigger Fail
-jobconf_monitor_alarm_content=Alarm Content
-jobconf_trigger_admin_adress=Trigger machine address
-jobconf_trigger_exe_regtype=Execotor-Registry Type
-jobconf_trigger_exe_regaddress=Execotor-Registry Address
-jobconf_trigger_address_empty=Trigger Fail:registry address is empty
-jobconf_trigger_run=Trigger Job
-jobconf_trigger_child_run=Trigger child job
-jobconf_callback_child_msg1={0}/{1} [Job ID={2}], Trigger {3}, Trigger msg: {4}
-jobconf_callback_child_msg2={0}/{1} [Job ID={2}], Trigger Fail, Trigger msg: Job ID is illegal
-jobconf_trigger_type=Job trigger type
-jobconf_trigger_type_cron=Cron trigger
-jobconf_trigger_type_manual=Manual trigger
-jobconf_trigger_type_parent=Parent job trigger
-jobconf_trigger_type_api=Api trigger
-jobconf_trigger_type_retry=Fail retry trigger
-jobconf_trigger_type_misfire=Misfire compensation trigger
-
-## user
-user_manage=User Manage
-user_username=Username
-user_password=Password
-user_role=Role
-user_role_admin=Admin User
-user_role_normal=Normal User
-user_permission=Permission
-user_add=Add User
-user_update=Edit User
-user_username_repeat=Username Repeat
-user_username_valid=Restrictions start with a lowercase letter and consist of lowercase letters and Numbers
-user_password_update_placeholder=Please input password, empty means not update
-user_update_loginuser_limit=Operation of current login account is not allowed
-
-## help
-job_help=Tutorial
-job_help_document=Official Document
diff --git a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties b/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
deleted file mode 100644
index dc00c697..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_CN.properties
+++ /dev/null
@@ -1,276 +0,0 @@
-admin_name=任务调度中心
-admin_name_full=分布式任务调度平台XXL-JOB
-admin_version=2.4.1-SNAPSHOT
-admin_i18n=
-
-## system
-system_tips=系统提示
-system_ok=确定
-system_close=关闭
-system_save=保存
-system_cancel=取消
-system_search=搜索
-system_status=状态
-system_opt=操作
-system_please_input=请输入
-system_please_choose=请选择
-system_success=成功
-system_fail=失败
-system_add_suc=新增成功
-system_add_fail=新增失败
-system_update_suc=更新成功
-system_update_fail=更新失败
-system_all=全部
-system_api_error=接口异常
-system_show=查看
-system_empty=无
-system_opt_suc=操作成功
-system_opt_fail=操作失败
-system_opt_edit=编辑
-system_opt_del=删除
-system_opt_copy=复制
-system_unvalid=非法
-system_not_found=不存在
-system_nav=导航
-system_digits=整数
-system_lengh_limit=长度限制
-system_permission_limit=权限拦截
-system_welcome=欢迎
-
-## daterangepicker
-daterangepicker_ranges_recent_hour=最近一小时
-daterangepicker_ranges_today=今日
-daterangepicker_ranges_yesterday=昨日
-daterangepicker_ranges_this_month=本月
-daterangepicker_ranges_last_month=上个月
-daterangepicker_ranges_recent_week=最近一周
-daterangepicker_ranges_recent_month=最近一月
-daterangepicker_custom_name=自定义
-daterangepicker_custom_starttime=起始时间
-daterangepicker_custom_endtime=结束时间
-daterangepicker_custom_daysofweek=日,一,二,三,四,五,六
-daterangepicker_custom_monthnames=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
-
-## dataTable
-dataTable_sProcessing=处理中...
-dataTable_sLengthMenu=每页 _MENU_ 条记录
-dataTable_sZeroRecords=没有匹配结果
-dataTable_sInfo=第 _PAGE_ 页 ( 总共 _PAGES_ 页,_TOTAL_ 条记录 )
-dataTable_sInfoEmpty=无记录
-dataTable_sInfoFiltered=(由 _MAX_ 项结果过滤)
-dataTable_sSearch=搜索
-dataTable_sEmptyTable=表中数据为空
-dataTable_sLoadingRecords=载入中...
-dataTable_sFirst=首页
-dataTable_sPrevious=上页
-dataTable_sNext=下页
-dataTable_sLast=末页
-dataTable_sSortAscending=: 以升序排列此列
-dataTable_sSortDescending=: 以降序排列此列
-
-## login
-login_btn=登录
-login_remember_me=记住密码
-login_username_placeholder=请输入登录账号
-login_password_placeholder=请输入登录密码
-login_username_empty=请输入登录账号
-login_username_lt_4=登录账号不应低于4位
-login_password_empty=请输入登录密码
-login_password_lt_4=登录密码不应低于4位
-login_success=登录成功
-login_fail=登录失败
-login_param_empty=账号或密码为空
-login_param_unvalid=账号或密码错误
-
-## logout
-logout_btn=注销
-logout_confirm=确认注销登录?
-logout_success=注销成功
-logout_fail=注销失败
-
-## change pwd
-change_pwd=修改密码
-change_pwd_suc_to_logout=修改密码成功,即将注销登陆
-change_pwd_field_newpwd=新密码
-
-## dashboard
-job_dashboard_name=运行报表
-job_dashboard_job_num=任务数量
-job_dashboard_job_num_tip=调度中心运行的任务数量
-job_dashboard_trigger_num=调度次数
-job_dashboard_trigger_num_tip=调度中心触发的调度次数
-job_dashboard_jobgroup_num=执行器数量
-job_dashboard_jobgroup_num_tip=调度中心在线的执行器机器数量
-job_dashboard_report=调度报表
-job_dashboard_report_loaddata_fail=调度报表数据加载异常
-job_dashboard_date_report=日期分布图
-job_dashboard_rate_report=成功比例图
-
-## job info
-jobinfo_name=任务管理
-jobinfo_job=任务
-jobinfo_field_add=新增
-jobinfo_field_update=更新任务
-jobinfo_field_id=任务ID
-jobinfo_field_jobgroup=执行器
-jobinfo_field_jobdesc=任务描述
-jobinfo_field_gluetype=运行模式
-jobinfo_field_executorparam=任务参数
-jobinfo_field_author=负责人
-jobinfo_field_timeout=任务超时时间
-jobinfo_field_alarmemail=报警邮件
-jobinfo_field_alarmemail_placeholder=请输入报警邮件,多个邮件地址则逗号分隔
-jobinfo_field_executorRouteStrategy=路由策略
-jobinfo_field_childJobId=子任务ID
-jobinfo_field_childJobId_placeholder=请输入子任务的任务ID,如存在多个则逗号分隔
-jobinfo_field_executorBlockStrategy=阻塞处理策略
-jobinfo_field_executorFailRetryCount=失败重试次数
-jobinfo_field_executorFailRetryCount_placeholder=失败重试次数,大于零时生效
-jobinfo_script_location=脚本位置
-jobinfo_shard_index=分片序号
-jobinfo_shard_total=分片总数
-jobinfo_opt_stop=停止
-jobinfo_opt_start=启动
-jobinfo_opt_log=查询日志
-jobinfo_opt_run=执行一次
-jobinfo_opt_run_tips=请输入本次执行的机器地址,为空则从执行器获取
-jobinfo_opt_registryinfo=注册节点
-jobinfo_opt_next_time=下次执行时间
-jobinfo_glue_remark=源码备注
-jobinfo_glue_remark_limit=源码备注长度限制为4~100
-jobinfo_glue_rollback=版本回溯
-jobinfo_glue_jobid_unvalid=任务ID非法
-jobinfo_glue_gluetype_unvalid=该任务非GLUE模式
-jobinfo_field_executorTimeout_placeholder=任务超时时间,单位秒,大于零时生效
-schedule_type=调度类型
-schedule_type_none=无
-schedule_type_cron=CRON
-schedule_type_fix_rate=固定速度
-schedule_type_fix_delay=固定延迟
-schedule_type_none_limit_start=当前调度类型禁止启动
-misfire_strategy=调度过期策略
-misfire_strategy_do_nothing=忽略
-misfire_strategy_fire_once_now=立即执行一次
-jobinfo_conf_base=基础配置
-jobinfo_conf_schedule=调度配置
-jobinfo_conf_job=任务配置
-jobinfo_conf_advanced=高级配置
-
-## job log
-joblog_name=调度日志
-joblog_status=状态
-joblog_status_all=全部
-joblog_status_suc=成功
-joblog_status_fail=失败
-joblog_status_running=进行中
-joblog_field_triggerTime=调度时间
-joblog_field_triggerCode=调度结果
-joblog_field_triggerMsg=调度备注
-joblog_field_handleTime=执行时间
-joblog_field_handleCode=执行结果
-joblog_field_handleMsg=执行备注
-joblog_field_executorAddress=执行器地址
-joblog_clean=清理
-joblog_clean_log=日志清理
-joblog_clean_type=清理方式
-joblog_clean_type_1=清理一个月之前日志数据
-joblog_clean_type_2=清理三个月之前日志数据
-joblog_clean_type_3=清理六个月之前日志数据
-joblog_clean_type_4=清理一年之前日志数据
-joblog_clean_type_5=清理一千条以前日志数据
-joblog_clean_type_6=清理一万条以前日志数据
-joblog_clean_type_7=清理三万条以前日志数据
-joblog_clean_type_8=清理十万条以前日志数据
-joblog_clean_type_9=清理所有日志数据
-joblog_clean_type_unvalid=清理类型参数异常
-joblog_handleCode_200=成功
-joblog_handleCode_500=失败
-joblog_handleCode_502=失败(超时)
-joblog_kill_log=终止任务
-joblog_kill_log_limit=调度失败,无法终止日志
-joblog_kill_log_byman=人为操作,主动终止
-joblog_lost_fail=任务结果丢失,标记失败
-joblog_rolling_log=执行日志
-joblog_rolling_log_refresh=刷新
-joblog_rolling_log_triggerfail=任务发起调度失败,无法查看执行日志
-joblog_rolling_log_failoften=终止请求Rolling日志,请求失败次数超上限,可刷新页面重新加载日志
-joblog_logid_unvalid=日志ID非法
-
-## job group
-jobgroup_name=执行器管理
-jobgroup_list=执行器列表
-jobgroup_add=新增执行器
-jobgroup_edit=编辑执行器
-jobgroup_del=删除执行器
-jobgroup_field_title=名称
-jobgroup_field_addressType=注册方式
-jobgroup_field_addressType_0=自动注册
-jobgroup_field_addressType_1=手动录入
-jobgroup_field_addressType_limit=手动录入注册方式,机器地址不可为空
-jobgroup_field_registryList=机器地址
-jobgroup_field_registryList_unvalid=机器地址格式非法
-jobgroup_field_registryList_placeholder=请输入执行器地址列表,多地址逗号分隔
-jobgroup_field_appname_limit=限制以小写字母开头,由小写字母、数字和中划线组成
-jobgroup_field_appname_length=AppName长度限制为4~64
-jobgroup_field_title_length=名称长度限制为4~12
-jobgroup_field_order_digits=请输入整数
-jobgroup_field_orderrange=取值范围为1~1000
-jobgroup_del_limit_0=拒绝删除,该执行器使用中
-jobgroup_del_limit_1=拒绝删除, 系统至少保留一个执行器
-jobgroup_empty=不存在有效执行器,请联系管理员
-
-## job conf
-jobconf_block_SERIAL_EXECUTION=单机串行
-jobconf_block_DISCARD_LATER=丢弃后续调度
-jobconf_block_COVER_EARLY=覆盖之前调度
-jobconf_route_first=第一个
-jobconf_route_last=最后一个
-jobconf_route_round=轮询
-jobconf_route_random=随机
-jobconf_route_consistenthash=一致性HASH
-jobconf_route_lfu=最不经常使用
-jobconf_route_lru=最近最久未使用
-jobconf_route_failover=故障转移
-jobconf_route_busyover=忙碌转移
-jobconf_route_shard=分片广播
-jobconf_idleBeat=空闲检测
-jobconf_beat=心跳检测
-jobconf_monitor=任务调度中心监控报警
-jobconf_monitor_detail=监控告警明细
-jobconf_monitor_alarm_title=告警类型
-jobconf_monitor_alarm_type=调度失败
-jobconf_monitor_alarm_content=告警内容
-jobconf_trigger_admin_adress=调度机器
-jobconf_trigger_exe_regtype=执行器-注册方式
-jobconf_trigger_exe_regaddress=执行器-地址列表
-jobconf_trigger_address_empty=调度失败:执行器地址为空
-jobconf_trigger_run=触发调度
-jobconf_trigger_child_run=触发子任务
-jobconf_callback_child_msg1={0}/{1} [任务ID={2}], 触发{3}, 触发备注: {4}
-jobconf_callback_child_msg2={0}/{1} [任务ID={2}], 触发失败, 触发备注: 任务ID格式错误
-jobconf_trigger_type=任务触发类型
-jobconf_trigger_type_cron=Cron触发
-jobconf_trigger_type_manual=手动触发
-jobconf_trigger_type_parent=父任务触发
-jobconf_trigger_type_api=API触发
-jobconf_trigger_type_retry=失败重试触发
-jobconf_trigger_type_misfire=调度过期补偿
-
-## user
-user_manage=用户管理
-user_username=账号
-user_password=密码
-user_role=角色
-user_role_admin=管理员
-user_role_normal=普通用户
-user_permission=权限
-user_add=新增用户
-user_update=更新用户
-user_username_repeat=账号重复
-user_username_valid=限制以小写字母开头,由小写字母、数字组成
-user_password_update_placeholder=请输入新密码,为空则不更新密码
-user_update_loginuser_limit=禁止操作当前登录账号
-
-## help
-job_help=使用教程
-job_help_document=官方文档
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties b/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
deleted file mode 100755
index 2152c298..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/resources/i18n/message_zh_TC.properties
+++ /dev/null
@@ -1,276 +0,0 @@
-admin_name=任務調度中心
-admin_name_full=分布式任務調度平臺XXL-JOB
-admin_version=2.4.1-SNAPSHOT
-admin_i18n=
-
-## system
-system_tips=系統提示
-system_ok=確定
-system_close=關閉
-system_save=儲存
-system_cancel=取消
-system_search=搜尋
-system_status=狀態
-system_opt=操作
-system_please_input=請輸入
-system_please_choose=请選擇
-system_success=成功
-system_fail=失敗
-system_add_suc=新增成功
-system_add_fail=新增失敗
-system_update_suc=更新成功
-system_update_fail=更新失敗
-system_all=全部
-system_api_error=API錯誤
-system_show=查看
-system_empty=無
-system_opt_suc=操作成功
-system_opt_fail=操作失敗
-system_opt_edit=編輯
-system_opt_del=刪除
-system_opt_copy=復制
-system_unvalid=非法
-system_not_found=不存在
-system_nav=導航
-system_digits=整數
-system_lengh_limit=長度限制
-system_permission_limit=權限控管
-system_welcome=歡迎
-
-## daterangepicker
-daterangepicker_ranges_recent_hour=最近一小時
-daterangepicker_ranges_today=今日
-daterangepicker_ranges_yesterday=昨日
-daterangepicker_ranges_this_month=本月
-daterangepicker_ranges_last_month=上個月
-daterangepicker_ranges_recent_week=最近一周
-daterangepicker_ranges_recent_month=最近一月
-daterangepicker_custom_name=自定義
-daterangepicker_custom_starttime=起始時間
-daterangepicker_custom_endtime=結束時間
-daterangepicker_custom_daysofweek=日,一,二,三,四,五,六
-daterangepicker_custom_monthnames=一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月
-
-## dataTable
-dataTable_sProcessing=處理中...
-dataTable_sLengthMenu=每頁 _MENU_ 條記錄
-dataTable_sZeroRecords=沒有相符合記錄
-dataTable_sInfo=第 _PAGE_ 頁 ( 總共 _PAGES_ 頁,_TOTAL_ 條記錄 )
-dataTable_sInfoEmpty=無記錄
-dataTable_sInfoFiltered=(由 _MAX_ 項結果過濾)
-dataTable_sSearch=搜尋
-dataTable_sEmptyTable=表中資料為空
-dataTable_sLoadingRecords=載入中...
-dataTable_sFirst=首頁
-dataTable_sPrevious=上頁
-dataTable_sNext=下頁
-dataTable_sLast=末頁
-dataTable_sSortAscending=: 以升幂排序此列
-dataTable_sSortDescending=: 以降幂排序此列
-
-## login
-login_btn=登入
-login_remember_me=記住密碼
-login_username_placeholder=請輸入登入帳號
-login_password_placeholder=請輸入登入密碼
-login_username_empty=請輸入登入帳號
-login_username_lt_4=登入帳號不應低於4位數
-login_password_empty=請輸入登入密碼
-login_password_lt_4=登入密碼不應低於4位數
-login_success=登入成功
-login_fail=登入失敗
-login_param_empty=帳號或密碼為空值
-login_param_unvalid=帳號或密碼錯誤
-
-## logout
-logout_btn=登出
-logout_confirm=確認登出?
-logout_success=登出成功
-logout_fail=登出失敗
-
-## change pwd
-change_pwd=修改密碼
-change_pwd_suc_to_logout=修改密碼成功,即將登出
-change_pwd_field_newpwd=新密碼
-
-## dashboard
-job_dashboard_name=運行報表
-job_dashboard_job_num=任務數量
-job_dashboard_job_num_tip=調度中心運行的任務數量
-job_dashboard_trigger_num=調度次數
-job_dashboard_trigger_num_tip=調度中心觸發的調度次數
-job_dashboard_jobgroup_num=執行器數量
-job_dashboard_jobgroup_num_tip=調度中心在線的執行器機器數量
-job_dashboard_report=調度報表
-job_dashboard_report_loaddata_fail=調度報表資料加載異常
-job_dashboard_date_report=日期分布圖
-job_dashboard_rate_report=成功比例圖
-
-## job info
-jobinfo_name=任務管理
-jobinfo_job=任務
-jobinfo_field_add=新增
-jobinfo_field_update=更新任務
-jobinfo_field_id=任務ID
-jobinfo_field_jobgroup=執行器
-jobinfo_field_jobdesc=任務描述
-jobinfo_field_gluetype=運行模式
-jobinfo_field_executorparam=任務參數
-jobinfo_field_author=負責人
-jobinfo_field_timeout=任務超時秒數
-jobinfo_field_alarmemail=告警郵件
-jobinfo_field_alarmemail_placeholder=輸入多個告警郵件地址,請以逗號分隔
-jobinfo_field_executorRouteStrategy=路由策略
-jobinfo_field_childJobId=子任務ID
-jobinfo_field_childJobId_placeholder=輸入子任務ID,如有多個請以逗號分隔
-jobinfo_field_executorBlockStrategy=阻塞處理策略
-jobinfo_field_executorFailRetryCount=失敗重試次數
-jobinfo_field_executorFailRetryCount_placeholder=失敗重試次數,大於零時生效
-jobinfo_script_location=腳本位置
-jobinfo_shard_index=分片序號
-jobinfo_shard_total=分片總數
-jobinfo_opt_stop=停止
-jobinfo_opt_start=啟動
-jobinfo_opt_log=查詢日誌
-jobinfo_opt_run=執行一次
-jobinfo_opt_run_tips=請輸入本次執行的機器地址,為空則從執行器獲取
-jobinfo_opt_registryinfo=注冊節點
-jobinfo_opt_next_time=下次執行時間
-jobinfo_glue_remark=源碼備註
-jobinfo_glue_remark_limit=源碼備註長度限制為4~100
-jobinfo_glue_rollback=版本回復
-jobinfo_glue_jobid_unvalid=任務ID非法
-jobinfo_glue_gluetype_unvalid=該任務非GLUE模式
-jobinfo_field_executorTimeout_placeholder=任務超時時間,單位秒,大於零時生效
-schedule_type=調度類型
-schedule_type_none=無
-schedule_type_cron=CRON
-schedule_type_fix_rate=固定速度
-schedule_type_fix_delay=固定延遲
-schedule_type_none_limit_start=當前調度類型禁止啟動
-misfire_strategy=調度過期策略
-misfire_strategy_do_nothing=忽略
-misfire_strategy_fire_once_now=立即執行壹次
-jobinfo_conf_base=基礎配置
-jobinfo_conf_schedule=調度配置
-jobinfo_conf_job=任務配置
-jobinfo_conf_advanced=高級配置
-
-## job log
-joblog_name=調度日誌
-joblog_status=狀態
-joblog_status_all=全部
-joblog_status_suc=成功
-joblog_status_fail=失敗
-joblog_status_running=進行中
-joblog_field_triggerTime=調度時間
-joblog_field_triggerCode=調度結果
-joblog_field_triggerMsg=調度備註
-joblog_field_handleTime=執行時間
-joblog_field_handleCode=執行结果
-joblog_field_handleMsg=執行備註
-joblog_field_executorAddress=執行器地址
-joblog_clean=清理
-joblog_clean_log=日誌清理
-joblog_clean_type=清理方式
-joblog_clean_type_1=清理一個月之前日誌資料
-joblog_clean_type_2=清理三個月之前日誌資料
-joblog_clean_type_3=清理六個月之前日誌資料
-joblog_clean_type_4=清理一年之前日誌資料
-joblog_clean_type_5=清理一千條以前日誌資料
-joblog_clean_type_6=清理一萬條以前日誌資料
-joblog_clean_type_7=清理三萬條以前日誌資料
-joblog_clean_type_8=清理十萬條以前日誌資料
-joblog_clean_type_9=清理所有日誌資料
-joblog_clean_type_unvalid=清理類型參数異常
-joblog_handleCode_200=成功
-joblog_handleCode_500=失敗
-joblog_handleCode_502=失敗(超時)
-joblog_kill_log=终止任務
-joblog_kill_log_limit=調度失敗,無法终止日誌
-joblog_kill_log_byman=人為操作,主動終止
-joblog_lost_fail=任務結果丟失,標記失敗
-joblog_rolling_log=執行日誌
-joblog_rolling_log_refresh=更新
-joblog_rolling_log_triggerfail=任務發起調度失敗,無法查看執行日誌
-joblog_rolling_log_failoften=終止請求Rolling日誌,請求失敗次數超上限,可刷新頁面重新加載日誌
-joblog_logid_unvalid=日誌ID非法
-
-## job group
-jobgroup_name=執行器管理
-jobgroup_list=執行器列表
-jobgroup_add=新增執行器
-jobgroup_edit=編輯執行器
-jobgroup_del=刪除執行器
-jobgroup_field_title=名稱
-jobgroup_field_addressType=注冊方式
-jobgroup_field_addressType_0=自動注冊
-jobgroup_field_addressType_1=手動登錄
-jobgroup_field_addressType_limit=手動登錄注冊方式,機器地址不可為空
-jobgroup_field_registryList=機器地址
-jobgroup_field_registryList_unvalid=機器地址格式非法
-jobgroup_field_registryList_placeholder=請輸入執行器地址列表,多個地址請以逗號分隔
-jobgroup_field_appname_limit=限制以小寫字母開頭,由小寫字母、數字和中划線組成
-jobgroup_field_appname_length=AppName長度限制為4~64
-jobgroup_field_title_length=名稱長度限制為4~12
-jobgroup_field_order_digits=請輸入整數
-jobgroup_field_orderrange=取值範圍為1~1000
-jobgroup_del_limit_0=拒絕刪除,該執行器使用中
-jobgroup_del_limit_1=拒絕删除,系统至少保留一個執行器
-jobgroup_empty=不存在有效執行器,請聯絡系統管理員
-
-## job conf
-jobconf_block_SERIAL_EXECUTION=單機串行
-jobconf_block_DISCARD_LATER=丢棄后續調度
-jobconf_block_COVER_EARLY=覆蓋之前調度
-jobconf_route_first=第一個
-jobconf_route_last=最後一個
-jobconf_route_round=輪詢
-jobconf_route_random=隨機
-jobconf_route_consistenthash=一致性HASH
-jobconf_route_lfu=最不經常使用
-jobconf_route_lru=最近最久未使用
-jobconf_route_failover=故障轉移
-jobconf_route_busyover=忙碌轉移
-jobconf_route_shard=分片廣播
-jobconf_idleBeat=空閒檢測
-jobconf_beat=心跳檢測
-jobconf_monitor=任務調度中心監控告警
-jobconf_monitor_detail=監控告警明细
-jobconf_monitor_alarm_title=告警類型
-jobconf_monitor_alarm_type=調度失敗
-jobconf_monitor_alarm_content=告警内容
-jobconf_trigger_admin_adress=調度機器
-jobconf_trigger_exe_regtype=執行器-注冊方式
-jobconf_trigger_exe_regaddress=執行器-地址列表
-jobconf_trigger_address_empty=調度失敗:執行器地址為空
-jobconf_trigger_run=觸發調度
-jobconf_trigger_child_run=觸發子任務
-jobconf_callback_child_msg1={0}/{1} [任務ID={2}], 觸發{3}, 觸發備註: {4}
-jobconf_callback_child_msg2={0}/{1} [任務ID={2}], 觸發失败, 觸發備註: 任務ID格式錯誤
-jobconf_trigger_type=任務觸發類型
-jobconf_trigger_type_cron=Cron觸發
-jobconf_trigger_type_manual=手動觸發
-jobconf_trigger_type_parent=父任務觸發
-jobconf_trigger_type_api=API觸發
-jobconf_trigger_type_retry=失敗重試觸發
-jobconf_trigger_type_misfire=調度過期補償
-
-## user
-user_manage=用户管理
-user_username=帳號
-user_password=密碼
-user_role=角色
-user_role_admin=管理員
-user_role_normal=普通用戶
-user_permission=權限
-user_add=新增用戶
-user_update=更新用戶
-user_username_repeat=帳號重複
-user_username_valid=限制以小寫字母開頭,由小寫字母、數字組成
-user_password_update_placeholder=請輸入新密碼,為空則不更新密碼
-user_update_loginuser_limit=禁止操作當前登入帳號
-
-## help
-job_help=使用教程
-job_help_document=官方文件
\ No newline at end of file
diff --git a/com.xuxueli.xxl-job-admin/src/main/resources/logback.xml b/com.xuxueli.xxl-job-admin/src/main/resources/logback.xml
deleted file mode 100644
index d4b08c24..00000000
--- a/com.xuxueli.xxl-job-admin/src/main/resources/logback.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
- logback
-
-
-
-