quartz的helloworld

quartz是任务调度的一个框架。以前做定时任务调度时候用spring的@schedule注解就完成了,不过现在手头有个项目是用quartz做的,今天就去官网看了一下quartz怎么用,结果写第一个demo时候就遇到问题了。日志死活输出不了,看文档也没有任何说明,在网上搜了一下资料发现大家好像都一切正常。如果不想纠结日志为啥不输出,直接将log.info批量替换为System.out.println。我的运行demo一直出现:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

如果不想看详情,直接下载demo源码,然后直接运行即可,demo下载地址:http://download.csdn.net/download/zl544434558/9577213

下面是我demo源码的详情。
1,pom.xml:

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
        </dependency>

        <!--这个jar要加上,否则日志无法输出-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.2</version>
        </dependency>

log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="default" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
    </layout>
  </appender>


 <logger name="org.quartz">
   <level value="debug" />
 </logger>

  <root>
    <level value="debug" />
    <appender-ref ref="default" />
  </root>


</log4j:configuration>

HelloJob:


import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job {

    private static Logger _log = LoggerFactory.getLogger(HelloJob.class);

    public void execute(JobExecutionContext context) throws JobExecutionException {
        _log.info("Hello World! - " + new Date());
    }

}

SimpleExample


import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
public class SimpleExample {


    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(SimpleExample.class);

        log.info("------- Initializing ----------------------");

        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        log.info("------- Initialization Complete -----------");

        log.info("------- Scheduling Jobs -------------------");

        // computer a time that is on the next round minute
        Date runTime = TriggerUtils.getEvenMinuteDate(new Date());

        // define the job and tie it to our HelloJob class
        JobDetail job = new JobDetail("job1", "group1", HelloJob.class);

        // Trigger the job to run on the next round minute
        SimpleTrigger trigger = 
            new SimpleTrigger("trigger1", "group1", runTime);

        // Tell quartz to schedule the job using our trigger
        sched.scheduleJob(job, trigger);
        log.info(job.getFullName() + " will run at: " + runTime);  

        // Start up the scheduler (nothing can actually run until the 
        // scheduler has been started)
        sched.start();
        log.info("------- Started Scheduler -----------------");

        // wait long enough so that the scheduler as an opportunity to 
        // run the job!
        log.info("------- Waiting 90 seconds... -------------");
        try {
            // wait 90 seconds to show jobs
            Thread.sleep(90L * 1000L); 
            // executing...
        } catch (Exception e) {
        }

        // shut down the scheduler
        log.info("------- Shutting Down ---------------------");
        sched.shutdown(true);
        log.info("------- Shutdown Complete -----------------");
    }

    public static void main(String[] args) throws Exception {

        SimpleExample example = new SimpleExample();
        example.run();

    }

}

直接运行SimpleExample的main方法就可以了。
1,添加log4j.xml,log4j.jar不是必须的,只是为了让当前这个demo能够输出日志。现在很多项目用logback,完全可以用logback来替换掉。
2,SimpleExample里面注释和日志输出很多,看的好像很多代码,其实主要就六行代码起作用。创建scheduler,创建jobdetail,创建simpletrigger,将job和trigger添加到scheduler,启动scheduler。最后一个是shutdown。
3,quartz包下面有example目录,里面有十五个例子demo,下载下来后自己挨着跑一跑。
4,看了一下quartz的更新频率,觉得不是很活跃,14年一整年没有更新,15年更新一次,16年更新一次。而且这两年更新都还是小版本迭代。个人感觉应该是有其它类似的框架比它好用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值