Quartz:helloworld

Posted wwjj4811

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartz:helloworld相关的知识,希望对你有一定的参考价值。

一:相关依赖与环境

<dependencies>
        <!--核心包-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!--工具包-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

日志文件:log4j.properties

log4j.rootLogger=debug,stdout

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%d{yyyy-MM-dd HH/:mm/:ss}]%-5p %c(line/:%L) %x-%m%n

二.自定义Job类实现org.quartz.Job

Job:工作任务调度的接口,需要实现execute方法,在该方法中编写任务执行的业务逻辑

/**
 * 需要实现Job接口
 */
public class HelloJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime time = LocalDateTime.now();
        String localTime = df.format(time);
        System.out.println("数据库备份时间:"+localTime);
    }
}

三.编写trigger和scheduler测试

    public static void main(String[] args) throws SchedulerException {
        //调度器(Scheduler)
        //从工厂中获取
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        //任务实例(JobDetail)
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("job1", "group1")  //参数一:任务名称 参数二:任务组
                .build();
        //触发器(Trigger)
        SimpleTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")
                .startNow()//立即启用
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))  //每5秒执行一次
                .build();
        //关联触发器和任务  按照触发器的条件执行任务
        scheduler.scheduleJob(jobDetail,trigger);
        //启动
        scheduler.start();
    }

运行结果:每五秒执行一次Job

技术图片

 Job生命周期:从日志中可以看出,每一次调度器执行Job时,都会创建一个新的Job实例。实际上,当execute方法执行完成后,相关的Job实例会被释放,释放的Job实例被垃圾回收机制回收。

以上是关于Quartz:helloworld的主要内容,如果未能解决你的问题,请参考以下文章

Quartz —— 从 HelloWorld 开始

Quartz的使用

为啥这段代码会泄露? (简单的代码片段)

Java的任务调度,使用Cron表达式实现

分析解决 spring quartz 中出现的执行两次问题

OpenGL——第一个 OpenGL 程序