• 前期回顾:在自媒体文章自动审核的时候,审核通过后,判断了文章的发布时间大于当前时间,这个时候并没有真正的发布文章,而是把文章的状态设置为了8(审核通过待发布)

  • 定时任务的作用就是每分钟去扫描这些待发布的文章,如果当前文章的状态为8,并且发布时间小于当前时间的,立刻发布当前文章

  • 任务调度==定时任务

如何实现任务调度?

  • 多线程方式,结合sleep

  • JDK提供的API,例如:Timer、ScheduledExecutor

  • 框架,例如Quartz ,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求

  • spring task

入门案例

spring框架中默认就支持了一个任务调度,spring-task

(1)创建一个工程:spring-task-demo

pom文件

<!-- 继承Spring boot工程 -->
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version>
</parent>
​
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

(2)引导类:

package com.itheima.task;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
​
@SpringBootApplication
@EnableScheduling
public class TaskApplication {
​public static void main(String[] args) {SpringApplication.run(TaskApplication.class,args);}
}

(3)编写案例

package com.itheima.task.job;
​
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
​
import java.util.Date;
​
@Component
public class HelloJob {
​@Scheduled(cron = "0/5 * * * * ? *")public void eat(){System.out.println("5秒中吃一次饭,我想成为一个胖子"+new Date());}}

1.3 什么是分布式任务调度

当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度

1、并行任务调度

并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。

如果将任务调度程序分布式部署,每个结点还可以部署为集群,这样就可以让多台计算机共同去完成任务调度,我们可以将任务分割为若干个分片,由不同的实例并行执行,来提高任务调度的处理效率。

2、高可用

若某一个实例宕机,不影响其他实例来执行任务。

3、弹性扩容

当集群中增加实例就可以提高并执行任务的处理效率。

4、任务管理与监测

对系统中存在的所有定时任务进行统一的管理及监测。让开发人员及运维人员能够时刻了解任务执行情况,从而做出快速的应急处理响应。

分布式任务调度面临的问题:

当任务调度以集群方式部署,同一个任务调度可能会执行多次,例如:电商系统定期发放优惠券,就可能重复发放优惠券,对公司造成损失,信用卡还款提醒就会重复执行多次,给用户造成烦恼,所以我们需要控制相同的任务在多个运行实例上只执行一次。常见解决方案:

  • 分布式锁,多个实例在任务执行前首先需要获取锁,如果获取失败那么就证明有其他服务已经在运行,如果获取成功那么证明没有服务在运行定时任务,那么就可以执行。

  • ZooKeeper选举,利用ZooKeeper对Leader实例执行定时任务,执行定时任务的时候判断自己是否是Leader,如果不是则不执行,如果是则执行业务逻辑,这样也能达到目的。

1.4 xxl-Job简介

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

文档地址:分布式任务调度平台XXL-JOB

2.XXL-Job快速入门

2.1 环境搭建

2.1.1 调度中心环境要求

  • Maven3+

  • Jdk1.8+

  • Mysql5.7+

2.1.2 源码仓库地址

源码仓库地址 Release Download
https://github.com/xuxueli/xxl-job Download
xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 Download

也可以使用资料文件夹中的源码

2.1.3 初始化“调度数据库”

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

位置:/xxl-job/doc/db/tables_xxl_job.sql 共8张表

2.1.5 配置部署“调度中心”

步骤一:调度中心配置

调度中心配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties

数据库的连接信息修改为自己的数据库

### web
server.port=8888
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?Unicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
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
​
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=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=
​
### 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

步骤二:部署项目

如果已经正确进行上述配置,可将项目编译打包部署。

启动方式一:这是一个springboot项目,可以在idea中直接启动,不推荐使用

启动方式二:

  • 执行maven打包命令:package

  • 打完包以后,从项目的target目录中找到jar包拷贝到不带空格和中文的目录下

  • 执行以下命令,启动项目

java -jar xxl-job-admin-2.2.0-SNAPSHOT.jar

调度中心访问地址:http://localhost:8888/xxl-job-admin

任务调度,分布式任务调度相关推荐

  1. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>[1]系列. 项目地址: https://githu ...

  2. 分布式任务调度系统V1

    分布式任务调度系统V1目标 初步目标实现,实现任务的下发分配,分布式任务执行,支持任务分片(在代码上支持),任务执行记录. 任务调度系统构思 基于C/S架构实现,基于长连接来管理实现,当前版本的逻辑架 ...

  3. Quartz 实现分布式任务调度

    2019独角兽企业重金招聘Python工程师标准>>> 情景 在开发的时候可能需要用到任务调度,通常我们使用quartz,单独部署一个实例来进行任务调度,然后就会存在单点的风险,qu ...

  4. 【Python】轻量级分布式任务调度系统-RQ

    一 前言       Redis Queue 一款轻量级的P分布式异步任务队列,基于Redis作为broker,将任务存到redis里面,然后在后台执行指定的Job.就目前而言有三套成熟的工具cele ...

  5. XXL-JOB v2.0.2,分布式任务调度平台

    v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌n ...

  6. 这些优秀的国产分布式任务调度系统,你用过几个?

    2019独角兽企业重金招聘Python工程师标准>>> 分布式调度在互联网企业中占据着十分重要的作用,尤其是电子商务领域,由于存在数据量大.高并发的特点,对数据处理的要求较高,既要保 ...

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

    https://opentalk.upyun.com/303.html 2017 年 10 月 22 日,又拍云 Open Talk 联合 Spring Cloud 中国社区成功举办了"进击 ...

  8. XXL-JOB v2.0.1 发布,分布式任务调度平台

    XXL-JOB 正在角逐 " 2018 开源中国软件",期待您宝贵的一票! 投票链接: https://www.oschina.net/proje... v2.0.1 Releas ...

  9. 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案

    分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 参考文章: (1)分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 (2)https://www.cnblogs.co ...

  10. XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为& ...

最新文章

  1. 这五个网站可以让你免费学习编程,快收藏!
  2. Python网络爬虫从入门到实践 -- chapter 1 -- 网络爬虫入门
  3. ASP.NET自定义错误页面,分离配置信息,多环境发布
  4. Lync Server多SIP域环境和简单URL地址部署
  5. 某公司ASP.NET应聘上机试题
  6. STM32——电容触摸按键
  7. Snipaste工具的下载和使用
  8. Repeating Annotations
  9. mapbox-gl添加threejs飞线
  10. 【全局盘点】华为云政企全栈技术创新能力图谱
  11. 求一个十六进制数的各二进制位_C语言实现
  12. unity小技巧收集总结--自用(三)
  13. python网易云音乐下载,可选择歌曲,下载路径
  14. python是哪种动物_基于Python的动物识别专家系统
  15. JavaMail邮件系统中的addRecipient();和setRecipient();区别?
  16. 爽啊!写了一个网页:首字母索引的单词(十分垃圾,简单的不得了)
  17. CFS调度器学习总结
  18. 失易得数据恢复软件,再也不担心数据丢失
  19. 《MEMORY NETWORKS》翻译 Jason Weston, Sumit Chopra Antoine Bordes
  20. 【前端】保姆级的CSS简介

热门文章

  1. July, 19(R)
  2. 植物大战僵尸java圣诞版,植物大战僵尸2圣诞节版
  3. 色散关系与等离子体色散函数的解析性质
  4. python jpg压缩_python 实现图片批量压缩的示例
  5. 趋势外推预测 这一篇就够了(附上例题)~~~~~~~~~~~
  6. 自动控制系统的时域分析法——一阶系统的时域分析
  7. msk 频偏_数字调制MSK探究
  8. Mybatis新增数据后,报ERROR: Field * doesn‘t have a default value
  9. QT项目七:贪吃蛇游戏
  10. vmware12中安装winxp