如何在java中使用quartz
关注:277 答案:2 mip版
解决时间 2021-01-19 15:56
提问者孤独深渊
2021-01-18 23:51
如何在java中使用quartz
最佳答案
二级知识专家招人烦°惹人厌
2021-01-19 00:18
在java中使用quartz
public static void addJob(String jobName,Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
//启动
if(!sched.isShutdown())
sched.start();
}
public static void addJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName,
Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(triggerName, triggerGroupName);//触发器名,触发器组
trigger.setCronExpression(time);//触发器时间设定
sched.scheduleJob(jobDetail,trigger);
if(!sched.isShutdown())
sched.start();
}
public static void modifyJobTime(String jobName,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
ct.setCronExpression(time);
sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);
}
}
public static void modifyJobTime(String triggerName,String triggerGroupName,
String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
//修改时间
ct.setCronExpression(time);
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName);
}
}
public static void removeJob(String jobName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器
sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器
sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务
}
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器
sched.deleteJob(jobName,jobGroupName);//删除任务
}
全部回答
1楼白胡子大佬
2021-01-19 01:37
1.需要的jar包
实现定时任务 需要quartz-1.5.1.jar和commons-logging-1.1.jar。
2.定义定时任务配置类
该类主要进行定时任务时间的设置和设置对应的定时任务类。
import org.quartz.crontrigger;
import org.quartz.jobdetail;
import org.quartz.scheduler;
import org.quartz.impl.stdschedulerfactory;
public class test{
public static void cleanupjob() {
try {
jobdetail jobdetail = new jobdetail();
jobdetail.setname("cleanup");
jobdetail.setjobclass(printjob.class);
crontrigger trigger = new crontrigger();
trigger.setname("cleanuptrigger");
trigger.setjobname("cleanup");
trigger.setcronexpression("0/5 * * * * ?");
scheduler sch = stdschedulerfactory.getdefaultscheduler();
sch.schedulejob(jobdetail, trigger);
sch.start();
} catch (exception e) {
e.printstacktrace();
}
}
public static void modifyjobtime(string triggername, string time) {
system.out.println("modify~~~~~~~~~~~~~~~~");
try {
scheduler sched = stdschedulerfactory.getdefaultscheduler();
system.out.println("triggername " + triggername);
crontrigger trigger = (crontrigger) sched.gettrigger(triggername, scheduler.default_group);
if(trigger == null) {
return;
}
string oldtime = trigger.getcronexpression();
system.out.println("oldtime " + oldtime);
if (!oldtime.equalsignorecase(time)) {
system.out.println("time " + time);
// 修改时间
trigger.setcronexpression(time);
}
} catch (exception e) {
e.printstacktrace();
throw new runtimeexception(e);
}
}
public static void main(string[] args) {
cleanupjob();
modifyjobtime("cleanuptrigger", "0/2 * * * * ?");
}
}
3.定时任务类
该类主要定义定时任务执行的内容。
import java.text.simpledateformat;
import java.util.date;
import org.quartz.job;
import org.quartz.jobexecutioncontext;
import org.quartz.jobexecutionexception;
public class printjob implements job{
@override
public void execute(jobexecutioncontext arg0) throws jobexecutionexception {
simpledateformat sdf = new simpledateformat("yyyy-mm-dd hh:mm:ss.sss");
string time = sdf.format(new date());
system.out.println("print job" + time);
}
}
4.输出结果
modify~~~~~~~~~~~~~~~~
triggername cleanuptrigger
oldtime 0/5 * * * * ?
time 0/2 * * * * ?
print job2014-12-03 17:06:40.031
print job2014-12-03 17:06:42.015
print job2014-12-03 17:06:44.016
print job2014-12-03 17:06:46.019
print job2014-12-03 17:06:48.019
print job2014-12-03 17:06:50.020
从输出的结果中可以看到,原本的定时任务为每5秒执行一次,但是由于后面对定时任务表达式做了修改,所以后来安照修改后的每2秒执行一次。
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上信息!
推荐资讯
大家都在看