什么是quartz?

Quartz是一个完全由 Java 编写的开源任务调度框架。

我们经常会遇到一些问题:

想每个月27号,提醒信用卡还款;

想每隔1小时,提醒一下,累了,站起来活动一下;

想每个月定时发送邮件,等等。

总结起来就是,在一个有规律的时间点做某件事。

quartz可满足复杂触发条件下的定时任务调度,比如每月的周一和周五 10点 15分执行。

quartz集群可保证系统的高可用性,即使一个节点崩了,也能保证任务的执行。

集群环境下,一个任务某个时间点只会在一个节点上运行。

核心概念

  1. Job 表示一个工作,要执行的具体内容
  2. JobDetail 表示任务的定义,Job 是任务的执行逻辑
  3. Trigger 代表一个调度参数的配置,什么时候去调
  4. Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。

quartz集群应用

集群中的节点放在不同的服务器上,称为水平集群。

节点放在同一台机器上,称为垂直集群,存在着单点故障问题。

Quartz可以借助关系数据库和JDBC作业存储支持集群。

数据库脚本

链接:https://pan.baidu.com/s/1BpDTVRwtN6_VVJqTx9flNQ

提取码:49ie

搭建spring boot环境

以定时发送邮件为例,每隔1分钟发送一次,邮件发送功能忽略,不是本例重点。

开发工具:Intellij IDEA

添加maven 依赖

配置

  • 配置application.yml
server:  port: ${PORT:8090}spring:  application:    name: learn-quartz  datasource:    druid:      url: ${MYSQL_URL:jdbc:mysql://192.168.0.113:3306/quartz?characterEncoding=utf-8&useSSL=false}      username: root      password: 123456      driverClassName: com.mysql.cj.jdbc.Driver      initialSize: 5  #初始建立连接数量      minIdle: 5  #最小连接数量      maxActive: 20 #最大连接数量      maxWait: 10000  #获取连接最大等待时间,毫秒      testOnBorrow: true #申请连接时检测连接是否有效      testOnReturn: false #归还连接时检测连接是否有效      timeBetweenEvictionRunsMillis: 60000 #配置间隔检测连接是否有效的时间(单位是毫秒)      minEvictableIdleTimeMillis: 300000  #连接在连接池的最小生存时间(毫秒)  quartz:    job-store-type: jdbc #数据库方式    jdbc:      initialize-schema: never #不初始化表结构    properties:      org:        quartz:          scheduler:            instanceId: AUTO #默认主机名和时间戳生成实例ID,可以是任何字符串,但对于所有调度程序来说,必须是唯一的 对应qrtz_scheduler_state INSTANCE_NAME字段            instanceName: clusteredScheduler #quartzScheduler          jobStore:            class: org.quartz.impl.jdbcjobstore.JobStoreTX #持久化配置            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate #我们仅为数据库制作了特定于数据库的代理            useProperties: false #以指示JDBCJobStore将JobDataMaps中的所有值都作为字符串,因此可以作为名称 - 值对存储而不是在BLOB列中以其序列化形式存储更多复杂的对象。从长远来看,这是更安全的,因为您避免了将非String类序列化为BLOB的类版本问题。            tablePrefix: QRTZ_  #数据库表前缀            misfireThreshold: 60000 #在被认为“失火”之前,调度程序将“容忍”一个Triggers将其下一个启动时间通过的毫秒数。默认值(如果您在配置中未输入此属性)为60000(60秒)。            clusterCheckinInterval: 5000 #设置此实例“检入”*与群集的其他实例的频率(以毫秒为单位)。影响检测失败实例的速度。            isClustered: true #打开群集功能          threadPool: #连接池            class: org.quartz.simpl.SimpleThreadPool            threadCount: 10            threadPriority: 5            threadsInheritContextClassLoaderOfInitializingThread: true
  • 定义Job
public class EmailJob extends QuartzJobBean {    @Value("${server.port}")    String port;    @Override    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {        String time = DateUtil.now();        System.out.println(time + " send email,server port:" + port);    }}
  • 配置QuartzConfig.java
@Configurationpublic class QuartzConfig {    @Bean    public JobDetail jobSendEmailDetails() {        return JobBuilder.newJob(EmailJob.class).withIdentity("emailJobId")                .storeDurably().build();    }    /**     * 1分钟1次,会平均分配到每个节点上     * @return     */    @Bean    public Trigger jobOrderCheckTrigger() {        return TriggerBuilder.newTrigger().forJob(jobSendEmailDetails())                .withIdentity("sendEmailTriggerId")                .withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?"))                .build();    }}

创建2个应用

选择Edit Configurations, 在spring boot目录下创建quartz1和quartz2, VM options中分别输入-DPORT=8090和-DPORT=8091, 启动两个实例,同一个任务会在两个实例中轮流执行,效果图:

quartz1

quartz2

mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务相关推荐

  1. mysql的每隔1分钟定时_深入研究MySQL(四)、备份与恢复

    一.前言 知道备份的重要性吗?没经历过的可能永远不知道,我们在重装系统.手机升级等时候,备份一下必要数据总是有好处的,指不定哪个神操作导致磁盘数据丢失,前些日子删库跑路被判刑的那位老哥,如果公司有备份 ...

  2. mysql的每隔1分钟定时_mysql定时任务

    查看event是否开启 show variables like '%sche%'; 开启event_scheduler set global event_scheduler =1; 创建存储过程spa ...

  3. java websocket注解_【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...

  4. springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列

    源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 My ...

  5. springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析

    一.概述 目前Spring Boot版本: 2.3.4.RELEASE,这更新的速度也是嗖嗖的了,随着新版本的发布,也一步步针对公司基础组件进行了升级改造,其中很重要的一块就是配置文件的更新(虽然目前 ...

  6. security面试_精选41 道 Spring Boot 面试题,附答案!

    今天跟大家分享下SpringBoot 常见面试题的知识. 1 什么是springboot ? 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件 ...

  7. springboot 优雅停机_新姿势,Spring Boot 2.3.0 如何优雅停机?

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/mu22If 先来一段简单的代码,如下: @RestControllerpub ...

  8. springboot生成包含特定数字_面试必问 —— Spring Boot 是如何实现自动配置的?

    什么是@Conditional? AutoConfigure源码分析 自动配置类中的条件注解 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 ...

  9. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

最新文章

  1. java进销存系统静态页_java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码...
  2. maven进行junit测试时报错(二)
  3. ReactOS 0.4.11 发布,Windows 系统的开源替代方案
  4. oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程
  5. 桦仔 笔记3-徐 设置数据库自动增长注意要点
  6. java语言程序设计考题_《JAVA语言程序设计》期末考试试题及答案6(应考必备题库)...
  7. Debian - RAID5搭建(热备)
  8. atitit.提升兼容性最佳实践 p825.doc
  9. UE4开发笔记1——UE4(虚幻4)引擎下载与安装
  10. ps界面为啥突然变大了_【新手必看】使用PS绘画需要学会哪些基本操作?
  11. [论文阅读][CVPR2021]EventZoom: Learning to Denoise and Super Resolve Neuromorphic Events
  12. python做正态分布的例子_python实现正态分布
  13. Python之xlsx文件转csv文件
  14. 新马華人的姓名大多用方言拼音,所以显得很混乱
  15. 图片怎么转换成pdf格式?这几个方法帮你一键转换
  16. Linux伪装windows,Ubuntu 一键伪装成Win 10,Kali Linux 2019 kali-undercover软件嫁接;
  17. txt文档在html中乱码怎么办,txt文件打开显示乱码怎么办?
  18. 监控电脑屏幕python
  19. 冲击GCT——考试法宝
  20. NVIDIA平台xavier upgrade update更新完后驱动丢失问题

热门文章

  1. spring配置讲解
  2. Serverless 工作流给人工智能带来了哪些变化?
  3. 那些年,我们见过的 Java 服务端“问题”
  4. Flink 1.8.0中的状态生存时间特性:如何自动清理应用程序的状态
  5. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
  6. 【从入门到放弃-Java】并发编程-锁-synchronized
  7. 蚂蚁金服SOFA开源负责人鲁直:不只是中间件,未来会开源更多
  8. 【实操手册】一篇文章教你快速开始使用视频点播
  9. 舞动的桥 阿里云首个百万IOPS云盘的背后
  10. 5分钟,带你了解不同类型的云计算!