• SpringBoot整合分布式任务调度平台xxl-job


    分布式任务调度平台XXL-JOB

    简介:XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

    这里贴上官方文档:分布式任务调度平台XXL-JOB

    XXL-JOB快速入门

    请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。

    “调度数据库初始化SQL脚本” 位置为:

    /xxl-job/doc/db/tables_xxl_job.sql
    

    解压源码,按照maven格式将源码导入IDE, 使用maven进行编译即可,源码结构如下:

    1. xxl-job-admin:调度中心
    2. xxl-job-core:公共依赖
    3. xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
    4. :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
    5. :xxl-job-executor-sample-frameless:无框架版本;

    配置部署“调度中心”

    1. 调度中心项目:xxl-job-admin
    2. 作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。

    调度中心配置文件地址:

    /xxl-job/xxl-job-admin/src/main/resources/application.properties
    

    调度中心配置内容说明:

    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

    部署项目:

    调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)

    默认登录账号 “admin/123456”, 登录后运行界面如下图所示。

    SpringBoot项目整合xxl-job

    在这里我就不进行springboot项目创建了我相信大家都会。

    1:引入xxl-job依赖

    1. <dependency>
    2. <groupId>com.xuxueligroupId>
    3. <artifactId>xxl-job-coreartifactId>
    4. <version>2.2.0version>
    5. dependency>

    2:配置application.properties

    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=default_token
    11. ### xxl-job executor appname
    12. xxl.job.executor.appname=springboot-xxl-job
    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=
    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

    3:添加配置类 XxlJobConfig

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

    4:进行测试

    1. @Component
    2. @Slf4j
    3. public class SampleXxlJob {
    4. private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
    5. /**
    6. * 1、简单任务示例(Bean模式)
    7. */
    8. @XxlJob("demoJobHandler")
    9. public ReturnT demoJobHandler(String param) throws Exception {
    10. XxlJobLogger.log("XXL-JOB, Hello World.");
    11. logger.info("我执行了========================================");
    12. for (int i = 0; i < 5; i++) {
    13. XxlJobLogger.log("beat at:" + i);
    14. TimeUnit.SECONDS.sleep(2);
    15. }
    16. return ReturnT.SUCCESS;
    17. }
    18. }

    5:启动我们刚刚新建的SpringBoot项目之后,进入到 xxl-job-admin 平台进行配置

    首先配置执行器

     然后配置我们的任务

    配置完成,点击任务执行。

    现在就可以了,配置完之后,就可以点那个蓝色按钮启动或者停止,然后去看日志是否成功,一种是我在项目中打印了一行日志。

  • 相关阅读:
    Java 流处理之收集器
    选择器汇总
    linux------常用命令和系统命令
    反SSDTHOOK的另一种思路-0环实现自己的系统调用
    LeetCode1710——卡车上的最大单元数
    Virtualbox固定存储硬盘转换为动态存储硬盘
    真香!超全,Python 中常见的配置文件写法
    Vue2:网易云播放音乐并实现同步一次显示一行歌词
    springboot 部署到 weblogic 中 jar 包冲突
    领英如何不让对方查看自己的好友
  • 原文地址:https://blog.csdn.net/weixin_63566550/article/details/126338272