任务调度知识点

任务调度

定时任务调度

定时任务调度在项目开发中是一种不可缺少的需求,在Java中,实现任务调度有三种方式,分别是jdk自带的任务定时工具Timer、Spring task、第三方组件Quartz,接下来细聊这三种方式。

方式一、Timer(JDK自带任务定时工具)
//        创建定时类Timer timer = new Timer();
//        创建任务类TimerTask timerTask = new TimerTask(){@Overridepublic void run() {System.out.println("定时任务启动了"+ LocalDateTime.now());}};
//        开启任务timer.schedule(timerTask,new Date(),2000);

运行截图如下
运行截图

方式二、Spring-task
步骤有三

1.须有springboot启动类
2.在启动类上添加注解@EnableScheduling以开启任务调度,编写任务类

@Component
public class text2 {@Scheduled(cron = "*/1 * * * * *")public void text2(){System.out.println("Spring-task开始执行"+ LocalDateTime.now());}
}

3.通过多任务及睡眠测试结论如下

@Scheduled(cron = "*/1 * * * * *")public void text1() throws InterruptedException {System.out.println("Spring-task开始执行1"+ LocalDateTime.now());Thread.sleep(5000);}@Scheduled(cron = "*/1 * * * * *")public void text2(){System.out.println("Spring-task开始执行2"+ LocalDateTime.now());}

结论
1.Spring-task执行任务按照单线程执行,也就是说任务串行执行,任务一未完成任务二不会执行。
2.单线程处理任务能力有限,不建议处理分布式架构任务调度。

Quartz(基于第三方插件)
步骤如下

引入相关依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

建立任务类实现Job接口,实现execute方法

public class test3 implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("Quarts执行了"+ LocalDateTime.now());}
}

在主方法中创建任务调度器

StdSchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();

创建JobDetail实例并与任务类绑定,同时设置任务名称及组名称

JobDetail build = JobBuilder.newJob(test3.class).withIdentity("job1","group1").build();

创建Trigger实例,设置触发器名称及组名并设置每三秒执行一次

Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever()).build();

开启任务调度器

scheduler.scheduleJob(build,trigger);scheduler.start();
JobDetail

在创建Trigger实例和JobDetail实例时可以添加扩展数据,并在执行任务时,通过该类型参数获取所扩展的数据JobExecutionContext。

//添加
JobDataMap jobDataMap = new JobDataMap();jobDataMap.put("param1","value1");jobDataMap.put("param2","value2");JobDetail jobDetail = JobBuilder.newJob(MyJob2.class).withIdentity("job2","group1").setJobData(jobDataMap).build();
//获取
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();System.out.println("任务被执行了,任务参数:"+jobDataMap.get("param1")+","+jobDataMap.get("param2"));
SimpleTrigger(简单的一类触发器)

1.在指定时间段内,执行一次任务
2.在指定时间段内,循环执行任务

CronTrigger(基于日历任务调度器)

可以通过表达式来设置时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/322992.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF crypto做题记录(5)新手向

一、传统知识古典密码 加上一个数&#xff0c;就有点移位加密的味道&#xff0c;很有可能就是凯撒加密 辛卯28&#xff0c;癸巳30&#xff0c;丙戌23&#xff0c;辛未8&#xff0c;庚辰17&#xff0c;癸酉10&#xff0c;己卯16&#xff0c;癸巳30 加1之后&#xff0c;28变29&a…

Unity之预制体与变体

PS:不用说了&#xff0c;我在写博客就是在摸鱼 一、预制体 不知道大家小时候有没有看过火影&#xff0c;记得剧情最开始的时候水木哄骗鸣人去偷封印之书&#xff0c;反而让鸣人学会了多重影分身之术&#xff1a; 好了&#xff0c;小编绞尽脑子终于想好怎么向大家介绍预制体了&a…

白酒详解及推荐

一、白酒分类 &#xff08;1&#xff09;清香型 以粮谷为原料&#xff0c;经传统固态法发酵、蒸馏、陈酿、勾兑而成的&#xff0c;未添加食用酒精及非白酒发酵产生的呈香呈味物质&#xff0c;具有以乙酸乙酯为主体复合香的白酒。常见的清香型白酒&#xff1a; &#xff08;2&…

【KingbaseES】实现MySql函数Space

CREATE OR REPLACE FUNCTION SPACE(input_length integer) RETURNS text AS $$ BEGIN RETURN REPEAT( , input_length) AS SPACES; END; $$ LANGUAGE plpgsql;

02、Kafka ------ 配置 Kafka 集群

目录 配置 Kafka 集群配置步骤启动各Kafka节点 配置 Kafka 集群 启动命令&#xff1a; 1、启动 zookeeper 服务器端 小黑窗输入命令&#xff1a; zkServer 2、启动 zookeeper 的命令行客户端工具 &#xff08;这个只是用来看连接的节点信息&#xff0c;不启动也没关系&#…

python的课后练习总结4(for循环)

1&#xff0c;for循环 for 临时变量 in 序列: 重复执行的代码1 重复执行的代码2 ........... 遍历序列 字符串 我是中国人 列表 [‘星期一,星期二,星期三,星期四] 元组 (‘星期一,星期二,星期三,星期四&#xff09; 一&#xff0c;break 终止循环 二&#xff0c;con…

Keil5----生成hex文件和bin文件

Keil5编译环境搭建----教程目录 keil5----生成hex文件 具体步骤如下&#xff1a; 步骤1&#xff1a; 点击 魔法棒 “Options for Target” 。步骤2&#xff1a; 单击 Output。步骤3&#xff1a; 选择输出生成文件的路径。步骤4&#xff1a; 自定义生成的hex文件名。步骤5&am…

pytorch08:学习率调整策略

目录 一、为什么要调整学习率&#xff1f;1.1 class _LRScheduler 二、pytorch的六种学习率调整策略2.1 StepLR2.2 MultiStepLR2.3 ExponentialLR2.4 CosineAnnealingLR2.5 ReduceLRonPlateau2.6 LambdaLR 三、学习率调整小结四、学习率初始化 一、为什么要调整学习率&#xff…

【基础篇】十四、GC算法

文章目录 1、实现思路2、SWT3、GC算法4、标记清除算法Mark Sweep GC5、复制算法Copying GC5、标记整理算法6、分代算法Generational GC7、分代的整体流程 1、实现思路 Java实现垃圾回收的步骤&#xff1a; 根据GC Root对象可达性分析&#xff0c;将内存中对象标记为存活的、可…

【python入门】day18:文件、os相关操作

编码格式 1、ASCLL–ISO8859-1–GBK–UTF-8– ISO8859-1–GBK等文件在格式上会显示为ASCLL 2、python文件默认格式 utf-8,看格式流程 选择python文件–用记事本打开–另存为… 这时可看到该文件的格式 3、修改python文件默认编码格式&#xff0c;在文件开头添加上&#xff1a; …

Docker容器相关操作

文章目录 容器相关操作1 新建并启动容器2 容器日志3 删除容器4 列出容器5 创建容器6 启动、重启、终止容器7 进入容器8 查看容器9 更新容器10 杀掉容器11 docker常用命令汇总 容器相关操作 ​ 容器是镜像的运行时实例。正如从虚拟机模板上启动 VM 一样&#xff0c;用户也同样可…

分布式【Zookeeper三大核心之数据节点ZNode】

ZooKeeper在分布式领域&#xff0c;能够帮助解决很多很多的分布式难题&#xff0c;但是底层却只是依赖于两个主要的组件&#xff1a;ZNode文件/数据存储系统和watch监听系统&#xff0c;另外还有一大模块&#xff0c;就是ACL系统。本节我们介绍下znode文件/数据存储系统。 一、…