xxl-job是通过xxl-admin-job作为调度中心,执行测试任务的。
    首先启动xxl-job-admin
    源码仓库地址

    1. https://github.com/xuxueli/xxl-job
    2. http://gitee.com/xuxueli0323/xxl-job

    首先执行sql脚本
    脚本代码为

    1. #
    2. # XXL-JOB v2.3.0
    3. # Copyright (c) 2015-present, xuxueli.
    4. CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci;
    5. use `xxl_job`;
    6. SET NAMES utf8mb4;
    7. CREATE TABLE `xxl_job_info` (
    8. `id` int(11) NOT NULL AUTO_INCREMENT,
    9. `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
    10. `job_desc` varchar(255) NOT NULL,
    11. `add_time` datetime DEFAULT NULL,
    12. `update_time` datetime DEFAULT NULL,
    13. `author` varchar(64) DEFAULT NULL COMMENT '作者',
    14. `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件',
    15. `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型',
    16. `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型',
    17. `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略',
    18. `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略',
    19. `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
    20. `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
    21. `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略',
    22. `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒',
    23. `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
    24. `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型',
    25. `glue_source` mediumtext COMMENT 'GLUE源代码',
    26. `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注',
    27. `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间',
    28. `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔',
    29. `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行',
    30. `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间',
    31. `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间',
    32. PRIMARY KEY (`id`)
    33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    34. CREATE TABLE `xxl_job_log` (
    35. `id` bigint(20) NOT NULL AUTO_INCREMENT,
    36. `job_group` int(11) NOT NULL COMMENT '执行器主键ID',
    37. `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
    38. `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址',
    39. `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler',
    40. `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数',
    41. `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2',
    42. `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数',
    43. `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间',
    44. `trigger_code` int(11) NOT NULL COMMENT '调度-结果',
    45. `trigger_msg` text COMMENT '调度-日志',
    46. `handle_time` datetime DEFAULT NULL COMMENT '执行-时间',
    47. `handle_code` int(11) NOT NULL COMMENT '执行-状态',
    48. `handle_msg` text COMMENT '执行-日志',
    49. `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败',
    50. PRIMARY KEY (`id`),
    51. KEY `I_trigger_time` (`trigger_time`),
    52. KEY `I_handle_code` (`handle_code`)
    53. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    54. CREATE TABLE `xxl_job_log_report` (
    55. `id` int(11) NOT NULL AUTO_INCREMENT,
    56. `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间',
    57. `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量',
    58. `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量',
    59. `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量',
    60. `update_time` datetime DEFAULT NULL,
    61. PRIMARY KEY (`id`),
    62. UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE
    63. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    64. CREATE TABLE `xxl_job_logglue` (
    65. `id` int(11) NOT NULL AUTO_INCREMENT,
    66. `job_id` int(11) NOT NULL COMMENT '任务,主键ID',
    67. `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型',
    68. `glue_source` mediumtext COMMENT 'GLUE源代码',
    69. `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注',
    70. `add_time` datetime DEFAULT NULL,
    71. `update_time` datetime DEFAULT NULL,
    72. PRIMARY KEY (`id`)
    73. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    74. CREATE TABLE `xxl_job_registry` (
    75. `id` int(11) NOT NULL AUTO_INCREMENT,
    76. `registry_group` varchar(50) NOT NULL,
    77. `registry_key` varchar(255) NOT NULL,
    78. `registry_value` varchar(255) NOT NULL,
    79. `update_time` datetime DEFAULT NULL,
    80. PRIMARY KEY (`id`),
    81. KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
    82. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    83. CREATE TABLE `xxl_job_group` (
    84. `id` int(11) NOT NULL AUTO_INCREMENT,
    85. `app_name` varchar(64) NOT NULL COMMENT '执行器AppName',
    86. `title` varchar(12) NOT NULL COMMENT '执行器名称',
    87. `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入',
    88. `address_list` text COMMENT '执行器地址列表,多地址逗号分隔',
    89. `update_time` datetime DEFAULT NULL,
    90. PRIMARY KEY (`id`)
    91. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    92. CREATE TABLE `xxl_job_user` (
    93. `id` int(11) NOT NULL AUTO_INCREMENT,
    94. `username` varchar(50) NOT NULL COMMENT '账号',
    95. `password` varchar(50) NOT NULL COMMENT '密码',
    96. `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员',
    97. `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割',
    98. PRIMARY KEY (`id`),
    99. UNIQUE KEY `i_username` (`username`) USING BTREE
    100. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    101. CREATE TABLE `xxl_job_lock` (
    102. `lock_name` varchar(50) NOT NULL COMMENT '锁名称',
    103. PRIMARY KEY (`lock_name`)
    104. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    105. INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' );
    106. INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', '');
    107. INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL);
    108. INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock');
    109. commit;

    xxl-job-admin配置文件

    1. ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
    2. spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
    3. spring.datasource.username=root
    4. spring.datasource.password=root_pwd
    5. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    6. ### 报警邮箱
    7. spring.mail.host=smtp.qq.com
    8. spring.mail.port=25
    9. spring.mail.username=xxx@qq.com
    10. spring.mail.password=xxx
    11. spring.mail.properties.mail.smtp.auth=true
    12. spring.mail.properties.mail.smtp.starttls.enable=true
    13. spring.mail.properties.mail.smtp.starttls.required=true
    14. spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
    15. ### 调度中心通讯TOKEN [选填]:非空时启用;
    16. xxl.job.accessToken=
    17. ### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;
    18. xxl.job.i18n=zh_CN
    19. ## 调度线程池最大线程配置【必填】
    20. xxl.job.triggerpool.fast.max=200
    21. xxl.job.triggerpool.slow.max=100
    22. ### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
    23. xxl.job.logretentiondays=30

    以上为调度中心的配置以下是自己项目的配置

    springboot引入依赖

    1. <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
    2. <dependency>
    3. <groupId>com.xuxueli</groupId>
    4. <artifactId>xxl-job-core</artifactId>
    5. <version>2.3.0</version>
    6. </dependency>

    首先启动xxl-job-admin
    地址默认为
    http://localhost:8080/xxl-job-admin
    创建执行器
    springboot项目配置官方版

    1. ### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
    2. xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
    3. ### 执行器通讯TOKEN [选填]:非空时启用;
    4. xxl.job.accessToken=
    5. ### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
    6. xxl.job.executor.appname=xxl-job-executor-sample
    7. ### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
    8. xxl.job.executor.address=
    9. ### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
    10. xxl.job.executor.ip=
    11. ### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
    12. xxl.job.executor.port=9999
    13. ### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
    14. xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
    15. ### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;

    实际项目示例:

    1. # web port
    2. server.port=8081
    3. # no web
    4. #spring.main.web-environment=false
    5. # log config
    6. logging.config=classpath:logback.xml
    7. ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
    8. xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
    9. ### xxl-job, access token
    10. xxl.job.accessToken=
    11. ### xxl-job executor appname
    12. xxl.job.executor.appname=xxl-job-executor-sample
    13. ### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
    14. xxl.job.executor.address=
    15. ### xxl-job executor server-info
    16. xxl.job.executor.ip=192.168.66.150
    17. xxl.job.executor.port=9999
    18. ### xxl-job executor log-path
    19. xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
    20. ### xxl-job executor log-retention-days
    21. xxl.job.executor.logretentiondays=30

    添加spring配置

    1. package com.hxzn.hxznsearch.config;
    2. import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
    3. import org.slf4j.Logger;
    4. import org.slf4j.LoggerFactory;
    5. import org.springframework.beans.factory.annotation.Value;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. /**
    9. * xxl-job config
    10. *
    11. * @author xuxueli 2017-04-28
    12. */
    13. @Configuration
    14. public class XxlJobConfig {
    15. private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    16. @Value("${xxl.job.admin.addresses}")
    17. private String adminAddresses;
    18. @Value("${xxl.job.accessToken}")
    19. private String accessToken;
    20. @Value("${xxl.job.executor.appname}")
    21. private String appname;
    22. @Value("${xxl.job.executor.address}")
    23. private String address;
    24. @Value("${xxl.job.executor.ip}")
    25. private String ip;
    26. @Value("${xxl.job.executor.port}")
    27. private int port;
    28. @Value("${xxl.job.executor.logpath}")
    29. private String logPath;
    30. @Value("${xxl.job.executor.logretentiondays}")
    31. private int logRetentionDays;
    32. @Bean
    33. public XxlJobSpringExecutor xxlJobExecutor() {
    34. logger.info(">>>>>>>>>>> xxl-job config init.");
    35. XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
    36. xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
    37. xxlJobSpringExecutor.setAppname(appname);
    38. xxlJobSpringExecutor.setAddress(address);
    39. xxlJobSpringExecutor.setIp(ip);
    40. xxlJobSpringExecutor.setPort(port);
    41. xxlJobSpringExecutor.setAccessToken(accessToken);
    42. xxlJobSpringExecutor.setLogPath(logPath);
    43. xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
    44. return xxlJobSpringExecutor;
    45. }
    46. /**
    47. * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
    48. *
    49. * 1、引入依赖:
    50. * <dependency>
    51. * <groupId>org.springframework.cloud</groupId>
    52. * <artifactId>spring-cloud-commons</artifactId>
    53. * <version>${version}</version>
    54. * </dependency>
    55. *
    56. * 2、配置文件,或者容器启动变量
    57. * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
    58. *
    59. * 3、获取IP
    60. * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
    61. */
    62. }

    使用示例

    1. package com.hxzn.hxznsearch.config;
    2. import com.xxl.job.core.context.XxlJobHelper;
    3. import com.xxl.job.core.handler.annotation.XxlJob;
    4. import org.springframework.stereotype.Component;
    5. /**
    6. * 任务Handler示例(Bean模式)
    7. * <p>
    8. * 开发步骤:
    9. * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
    10. * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
    11. * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
    12. * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
    13. *
    14. * @author xuxueli 2015-12-19 19:43:36
    15. */
    16. @Component
    17. public class DemoJobHandler {
    18. @XxlJob("testhandler")
    19. public void demoJobHandler() throws Exception {
    20. XxlJobHelper.log("XXL-JOB, Hello World.");
    21. System.out.println("你好,xxl-job");
    22. }
    23. }

    踩坑docker安装总是失败,原因是数据无法连接
    自己打包上传到了docker hub
    下载

    1. docker pull xxsc0529/xxl-job-admin:2.3.0

    自定义启动规则

    1. docker run -e PARAMS="-–spring.datasource.url=jdbc:mysql://数据库ip:3306/数据库?Unicode=true&characterEncoding=UTF-8&useSSL=false --spring.datasource.username=root --spring.datasource.password=root --xxl.admin.login=false" \
    2. -p 9080:8080 --name xxl-job-admin \
    3. -d 镜像id
    1. docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://47.99.184.243:3306/continew_iot_server?Unicode=true&characterEncoding=UTF-8&useSSL=false --spring.datasource.username=server_rd --spring.datasource.password=12345678 --xxl.admin.login=false" \
    2. -p 9090:8080 --name xxl-job-admin \
    3. -d d8701cb71af8
    1. docker create --name xxl-job-admin -p 9090:8080 -e PARAM[BS="\ --spring.datasource.url=jdbc:mysql://47.99.184.243:3306/continew_iot_server?Unicode=true&characterEncoding=UTF-8 \
    2. --spring.datasource.username=server_rd \
    3. --spring.datasource.password=12345678" \
    4. -v /mydata/xxl-job/admin/logs:/data/applogs \
    5. --privileged=true d8701cb71af8