java quartz spring_JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务

AAffA0nNPuCLAAAAAElFTkSuQmCC

基于Spring Boot Quartz开发的JavaLib-quartz,目的是帮你快速构建定时任务系统,你可以专心编写你的业务逻辑,而不必关注定时任务具体是如何实现的,他的性能如何,有没有异常以及异常处理,监控等等问题。这些你可以在文档中得知。

快速使用

第1步、添加依赖

jitpack.io

https://jitpack.io

com.github.fengwenyi

JavaLib-quartz

1.0-gamma

第2步、HelloTask.java

package com.fengwenyi.example.javalib_quartz.start;

import com.fengwenyi.javalib.quartz.QuartzTask;

import org.springframework.stereotype.Component;

/**

* @author Wenyi Feng

*/

@Component

public class HelloTask extends QuartzTask {

}

第3步、HelloJob.java

package com.fengwenyi.example.javalib_quartz.start;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

import java.util.Date;

/**

* @author Wenyi Feng

*/

public class HelloJob extends QuartzJobBean {

@Override

protected void executeInternal(JobExecutionContext context) throws JobExecutionException {

System.out.println("Hello : " + new Date());

}

}

第4步、HelloController.java

package com.fengwenyi.example.javalib_quartz.start;

import com.fengwenyi.javalib.quartz.ScheduleBean;

import com.fengwenyi.javalib.quartz.TimeTypeEnum;

import org.quartz.Scheduler;

import org.quartz.SchedulerException;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

/**

* @author Wenyi Feng

*/

@RestController

@RequestMapping("/hello")

public class HelloController {

@Autowired

private Scheduler scheduler;

@Autowired

private HelloTask helloTask;

@RequestMapping("/job")

public boolean job() {

String jobName = "JOB";

String triggerName = "TRIGGER";

ScheduleBean scheduleBean = new ScheduleBean(scheduler, HelloJob.class, jobName, triggerName);

scheduleBean.setTimeType(TimeTypeEnum.AT_TIME);

scheduleBean.setAtTime(System.currentTimeMillis() + 1000 * 10); // 10s之后运行

boolean rs = false;

try {

rs = helloTask.start(scheduleBean);

System.out.println("cTime : " + new Date());

} catch (SchedulerException e) {

e.printStackTrace();

}

return rs;

}

}

第5步、浏览器访问

http://localhost:8080/hello/job

如果看到 true ,那就继续下一步,否则就是出错了,需要去检查错误。

第6步、运行效果

AAffA0nNPuCLAAAAAElFTkSuQmCC

API

名称

方法

参数

返回类型

说明

开启定时任务

start

(ScheduleBean)

boolean

开启是否成功,true:成功,false:失败

定时任务当前状态

status

-

boolean

定时任务当前状态,true:运行中,false:已停止

停止定时任务

stop

-

boolean

定时任务停止是否成功,true:成功,false:失败

ScheduleBean字段说明

名称

参数

类型

说明

Scheduler

scheduler

Scheduler

Scheduler 对象

编号

id

Long

-,保留字段

名称

name

String

-,保留字段

描述

description

String

-,保留字段

选用类型

timeTime

TimeTypeEnum

选用构造Trigger对象类型

job类

clazz

Class extends Job>

定时任务执行的job类

job参数

paramJobMap

Map

定时任务执行的job类

job类

paramTriggerMap

Map

定时任务执行的job类

cron表达式

cron

String

cron表达式

时间间隔

time

Integer

每隔一段时间执行一次

时间间隔

atTime

Long

指定一个时间点执行(毫秒数)

Job名称

jobName

String

Job名称

Job组

jobGroup

String

Job组名称

TriggerName

triggerName

String

Trigger名称

Trigger组

triggerGroup

String

Trigger组名称

TimeTypeEnum

字段说明

字段

类型

说明

code

Integer

代码

msg

String

说明

值说明

名称

代码

说明

SIMPLE

1

简单的定时任务,每隔一段时间执行一次

AT_TIME

2

指定一个时间点执行(毫秒数[Long])

CRON

3

使用cron表达式(时间点、循环、自定义时间)

wiki

一、需要在Job中注入Service

使用 @Autowired 注解

@Autowired

private DBService dbService;

二、每隔一段时间执行一次

int time;

ScheduleBean scheduleBean;

scheduleBean.setTimeType(TimeTypeEnum.SIMPLE);

scheduleBean.setTime(time);

三、指定一个时间点执行一次

long atTime;

ScheduleBean scheduleBean;

scheduleBean.setTimeType(TimeTypeEnum.AT_TIME);

scheduleBean.setAtTime(atTime);

四、通过使用cron表达式执行

String cron;

ScheduleBean scheduleBean;

scheduleBean.setTimeType(TimeTypeEnum.CRON);

scheduleBean.setCron(cron);

五、参数

// 将参数放到job中

Map jobMap;

ScheduleBean scheduleBean;

scheduleBean.setParamJobMap(jobMap);

// 将参数放到trigger中

Map triggerMap;

ScheduleBean scheduleBean;

scheduleBean.setParamTriggerMap(triggerMap);

六、关于在job获取参数

两种思路: 一是通过map的key获取值, 二是通过构造与map的key相同的属性,提供set方法

// 获取自己的参数

JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();

jobDataMap.getInt("");

jobDataMap.getString("");

jobDataMap.getFloat("");

jobDataMap.getDouble("");

JobDataMap triggerDataMap = context.getTrigger().getJobDataMap();

// 合并

// 如果job和trigger的key相同,trigger会覆盖job的值

JobDataMap dataMap = context.getMergedJobDataMap();

七、在job中获取jobDetail、trigger基础信息

// 获取jobDetail相关

JobKey jobKey = context.getJobDetail().getKey();

jobKey.getName();

jobKey.getGroup();

jobKey.getClass().getName();

// 获取trigger相关

TriggerKey triggerKey = context.getTrigger().getKey();

triggerKey.getName();

triggerKey.getGroup();

八、task目前支持的方法

开启任务:start

查看当前任务状态:status

停止任务:stop

策略

1、优先选用指定方式构造Trigger

2、检查顺序:cron->atTime->simple,执行顺序:simple > atTime > cron 自下而上进行覆盖

资料

About Me

©author Wenyi Feng

Licensed

Copyright 2018 Wenyi Feng(xfsy_2015@163.com)

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

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

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

相关文章

java static 加载顺序_一个例子搞清楚Java类加载顺序

当我们new一个GirlFriend时,我们都做了什么?一个例子搞懂Java程序运行顺序public class Girl {Person person new Person("Girl");static{System.out.println("Girl static");}static Person staticPerson new Person("GirlS…

java 轻量数据库_DBTree是一个springboot2 + vue-element-template实现的轻量数据库表结构查看及管理工具...

DBTree简介DBTree是一个WEB版的轻量数据库表结构查看及管理工具,相比phpMyAdmin, DBTree只专注于方便开发查看表结构信息和 注释维护。通过树形展示库表结构,可以对表进行自定义归类,在线更新注释。你还可以使用它来部分替代mybatis generato…

华为java 优招面试题_2017华为优招笔试题

哎,没有接到笔试通知,不知道为啥就错过了。之后见到题目,前两道编程题。其实都见过类似的题目,有点思路,但是直接快速完整实现出来,水平还是达不到。这样的题目,也不算难,三道编程题…

java inject例子_java – 手动实例化@InjectMock带注释的字段

我已经浏览了一些博客,以了解Mockito注释如何工作的基础知识.但是,我怀疑何时可以手动实例化用InjectMocks注释的字段,即InjectMocksA a new A();什么时候依靠MockitoAnnotations.initMocks()功能来做同样的事情:InjectMocksA a;这取决于我们用来运行测试用例的Jun…

java 新建 api 案列_Java利用webservice创建接口案例源码

环境要求:JDK1.7,并配置Java的环境变量BaseDao 接口:/*** 要使得成为一个可供访问的接口,必须添加:WebService* */WebServicepublic interface BaseDao {//添加一个加法的接口WebResult(name"addddddre")pu…

java通用异常_Java常用异常整理

填坑,整理下Java的常用异常。正确使用异常在实际编码中非常重要,但面试中的意义相对较小,因为对异常的理解和应用很难通过几句话或几行代码考查出来,不过我们至少应答出三点:异常类的继承关系、常用异常类、常用异常类…

mysql 读取properties_JDBC中使用Properties读取配置文件有什么用

开发中获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。使用properties文件,Java中有专门用来装载配置文件的类Properties(Java.util.Properties)…

java preferences设置_Java利用Preferences设置个人偏好

Preferences的中文意思即偏好或喜好的意思,也就是说同一个程序在每次运行完后,可以通过Preferences来记录用户的偏好,下次启动时,程序会利用这些信息来了解用户的喜好。而这些信息个人理解应该就是存储在系统的注册表中。下面我们…

java 移动页面中的图片上传_移动端上传图片(ajax跨域请求)

第一次写项目开发经验,望担待。除了前端以外的事就不叨叨了,下面开始弄干活(两个页面首页、列表页)。项目开发简述项目需求:上传图片并展示。项目地址:项目的链接地址开发工具:sublime后台:java开发语言&am…

java 空包_圆通快递接口,圆通快递礼品商城接口、圆通空包接口,圆通快递低价接口,礼品商城接口、一件代发接口...

更新仓库列表接口地址:http://xxxxxx.com/shop/updates/update-warehouse-list 违心:juzivtu接口介绍:更新发货仓库及发货快递信息请求方式:POST传参方式:JSON返回格式:JSON接口收费:开通一次,…

c和java内存泄漏区别_内存溢出和内存泄漏的区别(转)

1.1内存溢出:(Out Of Memory---OOM)系统已经不能再分配出你所需要的空间,比如你需要100M的空间,系统只剩90M了,这就叫内存溢出例子:一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不…

php正则表达式匹配逗号,数字和逗号PHP正则表达式只

我需要创建一个正则表达式验证逗号分隔的数值。数字和逗号PHP正则表达式只他们应该是这样的:1,2,3,4,5等....的值必须是一个数字,如:1点之前或之后没有空的空间,没有逗号之前或之后。或者......多个数值以逗号分隔。第一个和最后一…

java想要生成 字符串,如何在Java中“优雅地”生成String?

我想生成一个字符串,如sql命令:"INSERT INTO xxx VALUES(XXX, XXX, XXX)"目前我使用StringBuilder和一些String常量,如“INSERT INTO”来连接表名和插入值的输入String参数.但是,除了性能问题之外,这种简单的连接看起来并不优雅.有没有其他方法这样做&…

java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程

本文主要向大家介绍了JSON字符串和JAVA语言对象的相互转换教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。一:字符串转换为对象:使用JSON.parse()方法var str { "name": "AndrewNeo", "sex"…

php中的数组用什么统计,php数组元素统计与值汇总

array_count_values()array_count_values() 函数用于统计数组中所有值出现的次数。本函数返回一个数组&#xff0c;其元素的键名是原数组的值&#xff0c;键值是该值在原数组中出现的次数。语法 : array_count_values(array)参数描述array必需。规定输入的数组。例子<?php …

10天时间做出php,php 最近10天的所有日期

背景&#xff1a;有时候&#xff0c;比如画曲线图&#xff0c;需要前一天起近10天的日期&#xff0c;你不能获取昨天的时间一天一天减&#xff0c;可别减出20140230&#xff0c;20140231&#xff0c;这就闹笑话了我用下面的笨方法。$date array();for($i10;$i>1;$i--){$dat…

php cgi漏洞,Nginx + PHP CGI的一个可能的安全漏洞

现在普遍的Nginx PHP cgi的做法是在配置文件中, 通过正则匹配Nginx(PHP/fastcgi的PATH_INFO问题,设置SCRIPT_FILENAME, 今天发现了一个这种方式的安全漏洞.为什么会这样呢?比如, 如下的nginx conf:location ~ .php($|/) {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.p…

java开发怎么优化代码,代码优化,该如何处理

当前位置:我的异常网 Java Web开发 代码优化,该如何处理代码优化,该如何处理www.myexceptions.net 网友分享于&#xff1a;2014-08-19 浏览&#xff1a;0次代码优化public String Txt() throws ParseException {re (HttpServletRequest) ActionContext.getContext().get(S…

kali2.0安装mysql,Ubuntu/kali上安装MySQL,设置远程访问详细教程

搜索热词Ubuntu上安装MysqL非常简单只需要几条命令就可以完成。1. sudo apt-get install MysqL-server2. apt-get installMysqL-client (可选)3. sudo apt-get install libMysqLclient-dev(可选)安装过程中会提示设置密码什么的&#xff0c;注意设置了不要忘了&#xff0c;安装…

php数组在golang,go语言数据类型-数组(array)

数组是Go语言编程中最常用的数据结构之一。顾名思义&#xff0c;数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element)&#xff0c;一个数组包含的元素个数被称为数组的长度。在Go语言中数组是一个值类型(value type)。是真真实实的数组&#xff…