mysql的每隔1分钟定时_简单易用,spring boot集成quartz,实现分布式定时任务
什么是quartz?
Quartz是一个完全由 Java 编写的开源任务调度框架。
我们经常会遇到一些问题:
想每个月27号,提醒信用卡还款;
想每隔1小时,提醒一下,累了,站起来活动一下;
想每个月定时发送邮件,等等。
总结起来就是,在一个有规律的时间点做某件事。
quartz可满足复杂触发条件下的定时任务调度,比如每月的周一和周五 10点 15分执行。
quartz集群可保证系统的高可用性,即使一个节点崩了,也能保证任务的执行。
集群环境下,一个任务某个时间点只会在一个节点上运行。
核心概念
- Job 表示一个工作,要执行的具体内容
- JobDetail 表示任务的定义,Job 是任务的执行逻辑
- Trigger 代表一个调度参数的配置,什么时候去调
- 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,实现分布式定时任务相关推荐
- mysql的每隔1分钟定时_深入研究MySQL(四)、备份与恢复
一.前言 知道备份的重要性吗?没经历过的可能永远不知道,我们在重装系统.手机升级等时候,备份一下必要数据总是有好处的,指不定哪个神操作导致磁盘数据丢失,前些日子删库跑路被判刑的那位老哥,如果公司有备份 ...
- mysql的每隔1分钟定时_mysql定时任务
查看event是否开启 show variables like '%sche%'; 开启event_scheduler set global event_scheduler =1; 创建存储过程spa ...
- java websocket注解_【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml org.springframework.boot spring-boot-starter-websocket WebSocketC ...
- springboot中文文档_登顶 Github 的 Spring Boot 仓库!艿艿写的最肝系列
源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 My ...
- springboot 获取application参数_(最新 9000 字 )Spring Boot 配置特性解析
一.概述 目前Spring Boot版本: 2.3.4.RELEASE,这更新的速度也是嗖嗖的了,随着新版本的发布,也一步步针对公司基础组件进行了升级改造,其中很重要的一块就是配置文件的更新(虽然目前 ...
- security面试_精选41 道 Spring Boot 面试题,附答案!
今天跟大家分享下SpringBoot 常见面试题的知识. 1 什么是springboot ? 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件 ...
- springboot 优雅停机_新姿势,Spring Boot 2.3.0 如何优雅停机?
点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 来源 | https://urlify.cn/mu22If 先来一段简单的代码,如下: @RestControllerpub ...
- springboot生成包含特定数字_面试必问 —— Spring Boot 是如何实现自动配置的?
什么是@Conditional? AutoConfigure源码分析 自动配置类中的条件注解 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 ...
- springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置
本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...
最新文章
- java进销存系统静态页_java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码...
- maven进行junit测试时报错(二)
- ReactOS 0.4.11 发布,Windows 系统的开源替代方案
- oralce load的时候使用触发器会导致load慢吗_一次FGC导致CPU飙高的排查过程
- 桦仔 笔记3-徐 设置数据库自动增长注意要点
- java语言程序设计考题_《JAVA语言程序设计》期末考试试题及答案6(应考必备题库)...
- Debian - RAID5搭建(热备)
- atitit.提升兼容性最佳实践 p825.doc
- UE4开发笔记1——UE4(虚幻4)引擎下载与安装
- ps界面为啥突然变大了_【新手必看】使用PS绘画需要学会哪些基本操作?
- [论文阅读][CVPR2021]EventZoom: Learning to Denoise and Super Resolve Neuromorphic Events
- python做正态分布的例子_python实现正态分布
- Python之xlsx文件转csv文件
- 新马華人的姓名大多用方言拼音,所以显得很混乱
- 图片怎么转换成pdf格式?这几个方法帮你一键转换
- Linux伪装windows,Ubuntu 一键伪装成Win 10,Kali Linux 2019 kali-undercover软件嫁接;
- txt文档在html中乱码怎么办,txt文件打开显示乱码怎么办?
- 监控电脑屏幕python
- 冲击GCT——考试法宝
- NVIDIA平台xavier upgrade update更新完后驱动丢失问题