java quartz spring_JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务
基于Spring Boot Quartz開發(fā)的JavaLib-quartz,目的是幫你快速構(gòu)建定時(shí)任務(wù)系統(tǒng),你可以專心編寫你的業(yè)務(wù)邏輯,而不必關(guān)注定時(shí)任務(wù)具體是如何實(shí)現(xiàn)的,他的性能如何,有沒有異常以及異常處理,監(jiān)控等等問題。這些你可以在文檔中得知。
快速使用
第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之后運(yùn)行
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 ,那就繼續(xù)下一步,否則就是出錯(cuò)了,需要去檢查錯(cuò)誤。
第6步、運(yùn)行效果
API
名稱
方法
參數(shù)
返回類型
說明
開啟定時(shí)任務(wù)
start
(ScheduleBean)
boolean
開啟是否成功,true:成功,false:失敗
定時(shí)任務(wù)當(dāng)前狀態(tài)
status
-
boolean
定時(shí)任務(wù)當(dāng)前狀態(tài),true:運(yùn)行中,false:已停止
停止定時(shí)任務(wù)
stop
-
boolean
定時(shí)任務(wù)停止是否成功,true:成功,false:失敗
ScheduleBean字段說明
名稱
參數(shù)
類型
說明
Scheduler
scheduler
Scheduler
Scheduler 對象
編號(hào)
id
Long
-,保留字段
名稱
name
String
-,保留字段
描述
description
String
-,保留字段
選用類型
timeTime
TimeTypeEnum
選用構(gòu)造Trigger對象類型
job類
clazz
Class extends Job>
定時(shí)任務(wù)執(zhí)行的job類
job參數(shù)
paramJobMap
Map
定時(shí)任務(wù)執(zhí)行的job類
job類
paramTriggerMap
Map
定時(shí)任務(wù)執(zhí)行的job類
cron表達(dá)式
cron
String
cron表達(dá)式
時(shí)間間隔
time
Integer
每隔一段時(shí)間執(zhí)行一次
時(shí)間間隔
atTime
Long
指定一個(gè)時(shí)間點(diǎn)執(zhí)行(毫秒數(shù))
Job名稱
jobName
String
Job名稱
Job組
jobGroup
String
Job組名稱
TriggerName
triggerName
String
Trigger名稱
Trigger組
triggerGroup
String
Trigger組名稱
TimeTypeEnum
字段說明
字段
類型
說明
code
Integer
代碼
msg
String
說明
值說明
名稱
代碼
說明
SIMPLE
1
簡單的定時(shí)任務(wù),每隔一段時(shí)間執(zhí)行一次
AT_TIME
2
指定一個(gè)時(shí)間點(diǎn)執(zhí)行(毫秒數(shù)[Long])
CRON
3
使用cron表達(dá)式(時(shí)間點(diǎn)、循環(huán)、自定義時(shí)間)
wiki
一、需要在Job中注入Service
使用 @Autowired 注解
@Autowired
private DBService dbService;
二、每隔一段時(shí)間執(zhí)行一次
int time;
ScheduleBean scheduleBean;
scheduleBean.setTimeType(TimeTypeEnum.SIMPLE);
scheduleBean.setTime(time);
三、指定一個(gè)時(shí)間點(diǎn)執(zhí)行一次
long atTime;
ScheduleBean scheduleBean;
scheduleBean.setTimeType(TimeTypeEnum.AT_TIME);
scheduleBean.setAtTime(atTime);
四、通過使用cron表達(dá)式執(zhí)行
String cron;
ScheduleBean scheduleBean;
scheduleBean.setTimeType(TimeTypeEnum.CRON);
scheduleBean.setCron(cron);
五、參數(shù)
// 將參數(shù)放到j(luò)ob中
Map jobMap;
ScheduleBean scheduleBean;
scheduleBean.setParamJobMap(jobMap);
// 將參數(shù)放到trigger中
Map triggerMap;
ScheduleBean scheduleBean;
scheduleBean.setParamTriggerMap(triggerMap);
六、關(guān)于在job獲取參數(shù)
兩種思路: 一是通過map的key獲取值, 二是通過構(gòu)造與map的key相同的屬性,提供set方法
// 獲取自己的參數(shù)
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
jobDataMap.getInt("");
jobDataMap.getString("");
jobDataMap.getFloat("");
jobDataMap.getDouble("");
JobDataMap triggerDataMap = context.getTrigger().getJobDataMap();
// 合并
// 如果job和trigger的key相同,trigger會(huì)覆蓋job的值
JobDataMap dataMap = context.getMergedJobDataMap();
七、在job中獲取jobDetail、trigger基礎(chǔ)信息
// 獲取jobDetail相關(guān)
JobKey jobKey = context.getJobDetail().getKey();
jobKey.getName();
jobKey.getGroup();
jobKey.getClass().getName();
// 獲取trigger相關(guān)
TriggerKey triggerKey = context.getTrigger().getKey();
triggerKey.getName();
triggerKey.getGroup();
八、task目前支持的方法
開啟任務(wù):start
查看當(dāng)前任務(wù)狀態(tài):status
停止任務(wù):stop
策略
1、優(yōu)先選用指定方式構(gòu)造Trigger
2、檢查順序:cron->atTime->simple,執(zhí)行順序:simple > atTime > cron 自下而上進(jìn)行覆蓋
資料
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.
總結(jié)
以上是生活随笔為你收集整理的java quartz spring_JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: switch语句可以被代替吗_爬楼梯可以
- 下一篇: java通用异常_Java常用异常整理