分布式job-任务调度(一)
什么是任务调度:
任务调度:在单位时间内,去调用某个方法或者执行某段代码
java实现方式:
方法一(使用线程实现):
public static void ThreadTskScheduling() {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("执行一次:" + count++);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
方法二(使用timerTask):
public static void timerTaskTskScheduling() {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// 执行任务代码
System.out.println("执行一次:" + count++);
}
};
Timer timer = new Timer();
// 任务执行前的毫秒延迟。
long delay = 0;
// 间隔的秒数
long period = 1000;
timer.scheduleAtFixedRate(timerTask, delay, period);
}
方法三(使用定时线程池):
public static void ExecutorsTaskTskScheduling() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println("执行一次:" + count++);
}
};
// 定时线程池
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间,最后表示时间单位 表示启动以后延迟5秒执行,执行间隔是1秒
service.scheduleAtFixedRate(runnable, 5, 1, TimeUnit.SECONDS);
}
方法四(使用springboot自带的定时任务):
package com.springboot; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
//整合常见注解,扫包作用(当前同级目录)
@SpringBootApplication
@EnableAsync
@EnableScheduling // 2.开启定时任务
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
package com.springboot.scheduledtasks; import java.text.SimpleDateFormat;
import java.util.Date; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; @Component
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); @Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("任务1:" + dateFormat.format(new Date()));
} }
实现方式五(使用quartz):
package com.example.demo; import java.util.Date; import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class JobStart {
public static void main(String[] args) throws SchedulerException {
// https://www.w3cschool.cn/quartz_doc/quartz_doc-jop62d45.html
// 1.创建Scheduler的工厂
SchedulerFactory sf = new StdSchedulerFactory();
// 2.从工厂中获取调度器实例
Scheduler scheduler = sf.getScheduler(); // 3.创建JobDetail
JobDetail jb = JobBuilder.newJob(MyJob.class).withDescription("jiahou.quartz") // job的描述
.withIdentity("jiahou", "jiahouJob") // job 的name和group
.build(); // 任务运行的时间,SimpleSchedle类型触发器有效
long time = System.currentTimeMillis() + 3 * 1000L; // 3秒后启动任务
Date statTime = new Date(time);
// 4.创建Trigger
Trigger t = TriggerBuilder.newTrigger().withDescription("").withIdentity("ramTrigger", "ramTriggerGroup")
.startAt(statTime) // 默认当前时间启动
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) // 两秒执行一次
.build(); // 5.注册任务和定时器
scheduler.scheduleJob(jb, t);
// 6.启动 调度器
scheduler.start();
// 停止
// scheduler.shutdown(); }
}
package com.example.demo; import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class MyJob implements Job { // 执行任务调度方法
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("执行任务:" + System.currentTimeMillis());
} }
以上都是可以解决任务调度的方法,但在实际项目中,一般都是使用第三方quartz实现任务调度功能,既然已经有了quartz为什么还需要使用xxl-job呢?
参考:https://www.w3cschool.cn/quartz_doc/quartz_doc-jop62d45.html
分布式job-任务调度(一)的更多相关文章
- 开源分布式工作流任务调度系统Easy Scheduler Release 1.0.2发布
Easy Scheduler Release 1.0.2===Easy Scheduler 1.0.2是1.x系列中的第三个版本.此版本增加了调度开放接口.worker分组(指定任务运行的机器组).任 ...
- 分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)
1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景 ...
- 分布式工作流任务调度系统Easy Scheduler正式开源
分布式工作流任务调度系统Easy Scheduler正式开源 1.背景 在多位技术小伙伴的努力下,经过近2年的研发迭代.内部业务剥离及重构,也经历一批种子用户试用一段时间后,EasyScheduler ...
- 【niubi-job——一个分布式的任务调度框架】----niubi-job这下更牛逼了!
niubi-job迎来第一次重大优化 niubi-job是一款专门针对定时任务所设计的分布式任务调度框架,它可以进行动态发布任务,并且有超高的可用性保证. 有多少人半夜被叫起来查BUG,结果差到最后发 ...
- 【niubi-job——一个分布式的任务调度框架】----安装教程
niubi-job是什么 niubi-job是LZ耗时三个星期,费尽心血打造的一个具备高可靠性以及水平扩展能力的分布式任务调度框架,采用quartz作为底层的任务调度管理器,zookeeper做集群的 ...
- 基于Redis实现分布式定时任务调度
项目开发过程中,难免会有许多定时任务的需求进来.如果项目中还没有引入quarzt框架的情况下,我们通常会使用Spring的@Schedule(cron="* * * * *")注解 ...
- Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上
概述 定义 dolphinscheduler 官网地址 https://dolphinscheduler.apache.org/ dolphinscheduler GitHub地址 https://g ...
- 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现
引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...
- niubi-job:一个分布式的任务调度框架设计原理以及实现
niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之间独立 ...
- Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中
@ 目录 架构设计 总体架构 启动流程图 架构设计思想简述 负载均衡 缓存 实战使用 参数 参数优先级 内置参数 基础内置参数 衍生内置参数 本地参数和全局参数 工作流传参 数据源管理 支持数据源 创 ...
随机推荐
- vue-router路由传参
da给我们点击父组件之后跳转到子组件之后,需要携带参数,便于子组件获取数据.传参方式有三种:一. getDescribe(id) { // 直接调用$router.push 实现携带参数的跳转 thi ...
- C# socket通讯 send方法记录
由于本人是Java入门的开发,在C#开发中遇到的问题,在此记录一下: 1.client端的send方法不管发送出去没发送出去,总是显示发送出去. 查资料得知,send方法是将数据发送到缓存区,并不是直 ...
- R语言 一套内容 从入门 到放弃
[怪毛匠子整理] 1.下载 wget http://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.0.1.tar.gz 2.解压: tar -zxvf R-3.0. ...
- ubuntu16.04 解决boot空间不足
1. dpkg --get-selections |grep linux-image #查看已安装内核版本号 2. uname -a #查看现运行版本 3. sudo apt-get purge 版本 ...
- 神州数码HSRP(热备份路由协议)配置
实验要求:掌握HSRP配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface g0/6 进入端口 ip address ...
- 神州数码DEIGRP路由协议配置
实验要求:了解DEIGRP及其配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip addres ...
- oracle 修改服务端字符集编码
进入服务端的sqlplus命令界面 SELECT * FROM V$NLS_PARAMETERS; 可以查看参数的值. 解决字符集编码 NLS_CHARACTERSET 办法: UPDATE PROP ...
- I/O 模型与 Java
本文主要记录 Java 中 I/O 模型及相关知识点 .另,由于自身知识水平有限,如有不正之处,望各位能够谅解,欢迎批评指正! 一.I/O 基础 由于 Java 中 I/O 相关的 API ,无论是 ...
- mpvue开发小程序记录
1.同一组件内嵌套的 v-for 不能连续使用相同的索引,目前为: index,index <li v-for="(list, index) in datas" :key=& ...
- 使用Docker搭建LNMP开发环境
1.什么是Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技 ...