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

什么是quartz?

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

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

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

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

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

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

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

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

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

核心概念

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

quartz集群应用

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

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

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

c18b08bc0c695618eb9db1dac4d2cbb3.png

数据库脚本

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

提取码:49ie

搭建spring boot环境

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

开发工具:Intellij IDEA

添加maven 依赖

01dadb4f24ddfd40f370e8270cbc6fac.png

配置

  • 配置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, 启动两个实例,同一个任务会在两个实例中轮流执行,效果图:

2179b75a91f79591d6f23b07a363032b.png

quartz1

39458754cc4c988723b49212dbe7531d.png

quartz2

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

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

相关文章

阿里云安全肖力:从RSA2019看安全技术发展的十个机遇

又一年RSA大会归来。每一年参会,总会有一些不同的感悟,或是发现全球安全行业的新趋势,或是找到志同道合的新伙伴,或是看到很多人也相信我们相信的安全技术新方向。今天在回国的航班上提笔写下我的感悟和判断,希望对安全…

华为组织架调整,CloudAI升至第四大BG,打通全球第一款集成5G模组的4K直播编码器网络通信服务;谷歌宣布与IBM合作……...

关注并标星星CSDN云计算 速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go goIntel 10nm Tiger Lake晶圆首曝:核心面…

flowable DMN部署单独使用_06

文章目录配置规则部署使用项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base视频地址:https://www.bilibili.com/video/av79774697/DMN部署: dmn制定了规则之后,还需要部署好才能用DMN部署,独立使用 配…

SpringBoot使用SOFA-Lookout监控

本文介绍SpringBoot使用蚂蚁金服SOFA-Lookout配合Prometheus进行监控。 1.SOFA-Lookout介绍 上一篇已经介绍使用Prometheus进行暴露SpringBoot的一些指标进行监控,传送门,这一篇介绍如何使用SOFA-Lookout配合Prometheus。 SOFA-Lookout是蚂蚁金服开源的…

python迷宫小游戏大全_Python迷宫小游戏源代码、源程序

Python迷宫小游戏源程序包括两个文件maze.py和mazeGenerator.py,mazeGenerator.py实现迷宫地图的生成,程序运行截图:mazeGenerator.pyimport numpy as npimport randomimport copyclass UnionSet(object): """ 并查集实…

NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎

NoSQL最早起源于1998年,但从2009年开始,NoSQL真正开始逐渐兴起和发展。回望历史应该说NoSQL数据库的兴起,完全是十年来伴随互联网技术,大数据数据的兴起和发展,NoSQL在面临大数据场景下相对于关系型数据库运用&#xf…

详谈ARM架构与ARM内核发展史

戳蓝字“CSDN云计算”关注我们哦!作者 | 架构师技术联盟责编 | 阿秃1、ARM架构与ARM内核1.1 ARM架构与内核简述目前为止,ARM总共发布8种架构:ARMv1、ARMv2、ARMv3、ARMv4、ARMv5、ARMv6、ARMv7 、ARMv8,这是ARM架构指令集的多个v版…

DMN结合bpmn简化流程_07

项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base 视频地址:https://www.bilibili.com/video/av79774697/ DMN集成到BPMN中使用 简化流程,让我们的BPMN显得更加优雅 * DMN集成bpmn使用 新建决策树模板 注意一定要部署&…

阿里云RPA(机器人流程自动化)干货系列之一:认识RPA(上)

本文是阿里云RPA(机器人流程自动化)干货系列的开山之作,全面、详细的剖析了RPA的基本概念、给企业带来的价值点以及RPA的优劣势分析。 一、什么是RPA? 人类社会进入21世纪的第一个十年之后,全球企业大都面临着两个严峻…

linux pip3使用清华源_Linux实战016:Ubuntu搭建python开发环境

我们在安装Ubuntu系统的时候会自带安装python2.7和python3.6版本的Python解释器,直接执行"ptyhon"默认运行的是python2.7,只有执行"python3"时才会运行python3.6版本。Python解释器默认安装在/usr/bin目录下,但是Ubuntu并…

编写一个C程序,实现以下功能:定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中

编写一个C程序,实现以下功能: 定义一个学生结构体Student(含学号、姓名、年龄、身高)和一个函数sort(struct Student *p),该函数使用选择排序法按年龄由小到大排序。在主函数中输入10个学生的学号、姓名、年龄和身高,调用sort函数…

在抖音上刷到AI程序员的工资条后,我笑了,别吹了!

2020年,程序员会怎么样?A与B ,薪酬与前景程序员与远方2017年~2018年,是人工智能大火的时候。你会发现,跟朋友聊天不谈人工智能,聊天的bigger都上不去。作为一个前景明朗的朝阳行业,高薪吸引&…

C++面向对象思想 两条直线交点计算

我相信哪怕一点光,也能驱散学习中的迷雾,我在这分享一点自己的挫见 思路: 这题最大的难点就是abc三个常数要怎么去构造,这里需要数学公式去推导,虽然是初中水平,也能体现编程和数学密不可分了。因为我之后…

K8s 实践 | 如何解决多租户集群的安全隔离问题?

戳蓝字“CSDN云计算”关注我们哦!作者 | 匡大虎责编 | 阿秃导读:如何解决多租户集群的安全隔离问题是企业上云的一个关键问题,本文主要介绍 Kubernetes 多租户集群的基本概念和常见应用形态,以及在企业内部共享集群的业务场景下&a…

scara机器人dh参数表_两分钟带你了解机器人标定的因素

为什么机器人需要标定?影响机器人本体精度因素分为两大类:运动学因素——加工误差、机械公差/装配误差、减速器精度、减速器空程等;动力学因素——质量、惯性张量、摩擦力、关节柔性、连杆柔性。机器人本体的实际精度和理论设计模型可能会存在…

Git的3大区域

为什么使用git? 为了保存文件的每一个历史记录,以便查看每一个历史节点的文件变动情况和把错误的的历史节点回滚。 git分为3个区域,工作区、暂存区、版本库(本地)。 工作区包括git已经管理的文件区域和新增以及修改的文件区域 暂存区&#x…

python编辑学生分数_python处理excel(04)数据筛选和过滤

源数据,我们最终要找出年龄在18——30岁之间,分数大于85分的学生,为A类学生。在excel里可以使用筛选功能,先筛选age列,大于等于、小于。这两个条件限制。然后选score后边的小三角,条件为大于等于85.最终数据…

如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹出品 | CSDN云计算(ID:CSDNcloud)“SaaS企业迎来了最好的时代。一方面,产业互联网大潮已至,中国企业降本增效的需求提升;另一方面,云计算…

Git 回滚

文章目录1. 简述2. 命令版本3. idea 图形化版本(场景1)4. idea 图形化版本(场景2)1. 简述 Git 回滚:常见的有2种场景,第一种是回滚到之前版本,第二种是回滚到之后的版本。 2. 命令版本 用到的命令: 场景1(回滚之前的版本)&…

python开两个守护线程_python 守护线程

守护线程 如果python线程是守护线程,那么以为着这个线程是“不重要”的,“不重要”意味着如果他的父进程结束了但该守护线程没有运行完,守护进程就会被强制结束。如果线程是非守护线程,那么父进程只有等到守护线程运行完毕后才能结…