quartz

自设计比较通用的短信验证码处理框架

[亡魂溺海] 提交于 2020-03-10 19:55:08
前言 使用手机的短信验证码来验证真实的用户身份,几乎是互联网网站以及App标配的功能之一。也就是开发这类系统,基本上都包含了这类功能点。本文将简单介绍开发一个较为通用的短信验证码处理框架的设计。基本上通过简易修改就可以用在自己的项目上。 以下是由底层一直往上到应用接口层的设计思路: 1,数据库设计: 数据库建表参考代码如下: CREATE TABLE `sms_verify_code` ( `id` int(11) NOT NULL AUTO_INCREMENT, `phone` varchar(19) NOT NULL COMMENT '电话号码', `code` varchar(8) NOT NULL COMMENT '验证码', `datetime` datetime DEFAULT NULL COMMENT '发送时间', `usage_type` tinyint(4) DEFAULT '0' COMMENT '使用类型(辅助字段,一般用于区分验证码的用途,譬如普通身份验证短信,还是涉及金额的验证短信)', `valid` varchar(1) DEFAULT NULL COMMENT '目前是否生效', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=238 DEFAULT CHARSET=utf8mb4 COMMENT

分布式定时任务调度框架实践

心已入冬 提交于 2020-03-09 11:05:36
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/l4vuYpNRjKxQRkRTDhyg2Q 作者:陈王荣 分布式任务调度框架几乎是每个大型应用必备的工具,本文介绍了任务调度框架使用的需求背景和痛点,对业界普遍使用的开源分布式任务调度框架的使用进行了探究实践,并分析了这几种框架的优劣势和对自身业务的思考。 一、业务背景 1.1 为什么需要使用定时任务调度 (1)时间驱动处理场景: 整点发送优惠券,每天更新收益,每天刷新标签数据和人群数据。 (2)批量处理数据: 按月批量统计报表数据,批量更新短信状态,实时性要求不高。 (3)异步执行解耦: 活动状态刷新,异步执行离线查询,与内部逻辑解耦。 1.2 使用需求和痛点 (1)任务执行监控告警能力。 (2)任务可灵活动态配置,无需重启。 (3)业务透明,低耦合,配置精简,开发方便。 (4)易测试。 (5)高可用,无单点故障。 (6)任务不可重复执行,防止逻辑异常。 (7)大任务的分发并行处理能力。 二、开源框架实践与探索 2.1 Java 原生 Timer 和ScheduledExecutorService 2.1.1 Timer使用 Timer缺陷: Timer底层是使用单线程来处理多个Timer任务,这意味着所有任务实际上都是串行执行,前一个任务的延迟会影响到之后的任务的执行。

spring整合任务调度

蓝咒 提交于 2020-03-07 21:54:31
需要的包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> spring中配置bean <!--调度工厂--> <bean id="myScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="userMonitorTriggers"/> </list

Quartz任务调度入门

孤人 提交于 2020-03-07 08:23:46
了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecutionContext类提供了调度上下文的各种信息。 Job运行时的信息保存在JobDataMap实例中 ; ●JobDetail:Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。 通过该类的构造函数可以更具体地了解它的功用:JobDetail(java.lang.String name, java.lang.String group, java.lang.Class jobClass),该构造函数要求指定Job的实现类,以及任务在Scheduler中的组名和Job名称; ●Trigger:是一个类,描述触发Job执行的时间触发规则

spring定时任务的几种实现方式

大憨熊 提交于 2020-03-05 11:14:28
Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式,因为这样所以的类都是普通类

Spring定时任务的几种实现

て烟熏妆下的殇ゞ 提交于 2020-03-05 11:07:31
Spring定时任务的几种实现 Spring定时任务的几种实现 近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,稍后会详细介绍。 Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多,稍后会介绍。 从作业类的继承方式来讲,可以分为两类: 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。 作业类即普通的java类,不需要继承自任何基类。 注:个人推荐使用第二种方式

quartz 数据库表含义解释

匆匆过客 提交于 2020-03-05 01:26:58
一、表信息解析: 1.1.qrtz_blob_triggers : 以Blob 类型存储的触发器。 1.2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。 1.3.qrtz_cron_triggers:存放cron类型的触发器。 1.4.qrtz_fired_triggers:存放已触发的触发器。 1.5.qrtz_job_details:存放一个jobDetail信息。 1.6.qrtz_job_listeners:job**监听器**。 1.7.qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。 1.8.qrtz_paused_trigger_graps:存放暂停掉的触发器。 1.9.qrtz_scheduler_state:调度器状态。 1.10.qrtz_simple_triggers:简单触发器的信息。 1.11.qrtz_trigger_listeners:触发器监听器。 1.12.qrtz_triggers:触发器的基本信息。 二、Quartz的触发时间的配置的三种方式: 2.1.cron 方式:采用cronExpression表达式配置时间。 2.2.simple 方式:和JavaTimer差不多,可以指定一个开始时间和结束时间外加一个循环时间。 2.3.calendars 方式:可以和cron配合使用

C# WINFORM的定时作业 sleep和Quartz区别(Quartz并不好用)

被刻印的时光 ゝ 提交于 2020-03-04 15:45:08
程序需要实现定时作业的功能经常会遇到,之前我一直使用Sleep,今天我突然觉得C# 应该有简单的定时作业类可以使用吧,于是我百度了一把,果然有一个Quartz,但是使用后发现只能加载静态类代码,其实很不灵活。 一、C# WINFORM 中使用Quartz的例子代码: 1、VS2019创建一个WINFROM项目,NuGit管理器中直接安装Quartz。 2、加入下面的代码, 我专门为Quartz启动了一个线程m2: 1) Quartz的实现要建一个工厂factory, 2)建一个定时作业scheduler 3)加入一个工作项目job 4)加入一个触发条件trigger 5)最后执行就好。 注意这行代码: IJobDetail job = JobBuilder.Create<JobDemo>().Build(); 这个尖括号<>里面需要用到一个类,为此我们还要专门提供这个类 public class JobDemo:IJob,并在代码中加入定时执行的作业,这非常的不科学,静态的类不够灵活,很难访问instance中的全局变量,所以定时作业的使用会有很大的限制。虽然代码还是实现了5秒提示一个消息窗口,但是我准备不用Quartz。 using Quartz; using Quartz.Impl; namespace WindowsFormsApp1 { public partial

定时任务quartz

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-03 11:10:30
原文: https://www.cnblogs.com/rinack/p/7815272.html package com.common.util; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; import org.quartz.impl.StdSchedulerFactory; /** * * @Description * @author qgw * 2016 上午10:05:59 ^_^ */ public class QuartzManager { private static

QUARTZ 定时任务使用

你离开我真会死。 提交于 2020-03-03 07:04:31
目录 quartz 定时任务使用 准备工作 xml配置定时任务 执行结果分析 其它方式-注解配置 quartz 定时任务使用 工作中难免会用都定时任务,如果公司针对定时任务没有特别的要求,分布式定时任务你可以选择开源的定时任务elastic-job,与spring结合简单方便(当然需要zookeeper的支持);但是如果你所在的公司针对部分开源不感冒,或者有自己的组件化团队,或者自研的定时任务框架还在研发中,那么你只能选择java自带的Timer,或者Quartz,或者Spring3.0以后自带的task。这里我们介绍下Quartz的使用,感觉应用还是比较广泛的的。 准备工作 引入以下jar包:spring-context-support、quartz <!--定时任务--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.0.7.RELEASE</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version>