Quartz入门 : 一

本文介绍如何使用Quartz实现简单的定时任务。通过示例代码展示了如何定义任务主体、创建触发器及调度器,并启动定时任务。适用于希望了解Quartz基本用法的开发者。

引入xml文件:

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


定时任务主体:

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String jobName = jobExecutionContext.getJobDetail().getJobDataMap().getString("name");
        System.out.println("被调用 - 当前"+jobName+"--时间为"+System.currentTimeMillis());
    }

启动调度:

public class RunJob {

    public static void main(String[] args) throws SchedulerException {
        //1.创建Scheduler的工厂
        SchedulerFactory sf = new StdSchedulerFactory();

        //2.从工厂中获取调度器实例
        Scheduler scheduler = sf.getScheduler();

        //3.创建JobDetail
        JobDetail jb = JobBuilder.newJob(JobTest1.class)
                .withDescription("this is a test job") //job的描述
                .withIdentity("testJob01", "TestJobGroup") //job 的name和group
                .build();

        //任务运行的时间,SimpleSchedle类型触发器有效
        long time=  System.currentTimeMillis() + 3*1000L; //3秒后启动任务
        Date statTime = new Date(time);

        //4.创建Trigger
        //定时任务属性的大部分设置是在这
        Trigger t = TriggerBuilder.newTrigger()
                .withDescription("")
                .withIdentity("testTrigger01", "TestTriggerGroup")
                //.withSchedule(SimpleScheduleBuilder.simpleSchedule())
                .startAt(statTime)  //可设置执行时间
                //.startNow() //立即执行
                //.endAt(statTime)  //可设置停止时间
                //.withPriority(5) //设置优先级,当同一时间两个定时任务争夺资源时,优先级较高的将先执行,默认为5,没有上限,建议约定1-10
                .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()   //简单调度表。按固定时间来
                        .repeatForever() //一直执行
                        //.withRepeatCount(10) //重复执行次数
                        .withIntervalInSeconds(1) //隔多长时间重复执行?  1秒
                        //.withIntervalInMinutes() //分钟

                    //CalendarIntervalScheduleBuilder.calendarIntervalSchedule()  //日程调度表,可以按照日/周/月/年的方式来调度
                    //DailyTimeIntervalScheduleBuilder.dailyTimeIntervalSchedule()  //日程循环调度,可以设定每日的几点到几点,每隔多久,一周的那几天不执行,执行任务,
                    //CronScheduleBuilder.cronSchedule()    //支持linux Cron语法,功能强大,比较复杂
                )
                .build();

        //5.注册任务和定时器
        scheduler.scheduleJob(jb, t);

        //6.启动 调度器
        scheduler.start();
        System.out.println("启动时间="+System.currentTimeMillis());
    }

}


Quartz简单应用就是如上:

        1.JobTest1实现Quartz提供的接口Job,并实现方法execute,成为定时任务主体。

        2.main方法中创建调度器,并加入触发器和任务主体,启动触发器,就会按照在触发器中的配置对任务主体进行执行。

        3.任务主体的触发规则,全部在触发器的配置中。

        4.以上为简单应用,适用场景可能为项目启动时期规避初始化的资源争夺高峰,设置调度器,在高峰结束后进行次优先级的初始化任务。

        5.Quartz还可以搭配JDBC进行使用,这是通常用法,还在继续熟悉中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值