设置定时执行任务

首先需要在pom文件中应用定时执行任务包

	  <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>

具体的定时任务实现方式
1.首先创建需要定时执行的任务testJob,实现一个类继承job类

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Created by root on 2018/5/7.
 */
public class testJob implements Job {
    private static Logger logger = LoggerFactory.getLogger(testJob.class);
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("这是一个定时任务,启动时间为"+System.currentTimeMillis());
    }
}

2.指定具体执行时间

//创建任务通道
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler()
//加载需要执行的JOB
JobDetail jobByDay = newJob(testJob.class).withIdentity("myjob", Scheduler.DEFAULT_GROUP).build();
//设置执行时间,该例子中是让程序每天凌晨个00:00:00执行testJob
CronTrigger triggerByDay = newTrigger().withIdentity("trigger_ByDay", Scheduler.DEFAULT_GROUP).withSchedule(cronSchedule("0 0 0 * * ?")).build();

3.指定的执行时间是在cronSchedule()中进行配置,配置的格式为

Seconds Minutes Hours DayofMonth Month DayofWeek Year或
Seconds Minutes Hours DayofMonth Month DayofWeek

需要注意的点是
1.设置年的参数可以省略
2.DayofMonth配置的是,在每月的几号执行
DayofWeek 配置的是,在每月的周几执行
所以这两个参数基本是互斥的,不允许同时配置,当配置其中一项是,另外一项需要赋值?问号。所以认为必定存在一个问号?。例如
0 0 2 1 * ? 在每月的1日的凌晨2点执行调度任务
时间段的设置形式为x-y,例如
0 0 2 1-4 * ?在每月的1~4号凌晨2点执行调度任务
多个时间点的设置形式为x,y,z例如
0 0 10,14,16 ? * 2 在每个星期一上午10点,下午2点,4点 执行调度任务

基础的时间格式上述足够使用,如果需要更复杂的介绍,请查看
https://www.cnblogs.com/linjiqin/archive/2013/07/08/3178452.html

还有一种方式是使用Executors创建一个定时任务线程池 newScheduledThreadPool

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(3,
                    new ThreadFactoryBuilder()
                            .setNameFormat("Myscheduledtheeed-%d")
                            .setDaemon(true)
                            .build());
int start_time=1;//指定任务设置之后多长之后开始执行
int cycles_time=2;  //指定每隔多长时间,在执行一次任务
TimeUnit unit =TimeUnit.DAYS; //指定上面两个参数的时间单位
scheduler .scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
               // do you work 
            }
        }start_time,cycles_time,unit);

int start_time2=1;//指定任务设置之后多长之后开始执行
int cycles_time2=2;  //指定每隔多长时间,在执行一次任务
TimeUnit unit =TimeUnit.DAYS; //指定上面两个参数的时间单位
//与上面不同的是,循环时间会依据执行任务时间推迟 ,所有每次的任务启动时间间隔为————>任务执行时间+cycles_time2
scheduler .scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
               // do you work 
            }
        }start_time,cycles_time,unit);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值