Quartz入门(一)-----实现定时功能

来源:互联网 发布:游戏锁定fps软件 编辑:程序博客网 时间:2024/06/06 10:58

Quartz 是一个开源的作业调度框架,能够用它来为执行一个作业而创建简单的或复杂的调度。不啰嗦了,这里就不做简介了,直接进入主题!网上的一些代码看的比较费劲,对于初学的人很费劲,所以搞了一个mini版本的,本文就是围绕Quartz(与Spring结合)实现一个简单的定时任务!

1 引入pom文件

    <properties>        <spring.version>4.0.5.RELEASE</spring.version>        <quartz.version>2.2.1</quartz.version>    </properties>

1.1 Spring(4.0.5)

<!-- spring -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-orm</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>${spring.version}</version>        </dependency>

1.2 Quartz(2.2.1)

        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>${quartz.version}</version>        </dependency>        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz-jobs</artifactId>            <version>${quartz.version}</version>        </dependency>

备注:spring3.1以上版本才支持 quartz 2.x;spring 3.1以下请使用quartz1.x

2 定时任务类的实现

在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类和方法仍然是普通类。本文采用第二种方式,首先写一个简单的Mission类(定时任务的具体实现):

public class Mission {    protected void execute() {        System.out.println("process the timer task at [" + dateFormat() + "]");    }    /**     * record the time of message     *      * @return     */    private String dateFormat() {        long time = System.currentTimeMillis();        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Date date = new Date(time);        return sdf.format(date);    }}

3 配置文件(spring.xml)

<bean id="SpringQtzJob" class="com.quartz.demo.Mission"/>          <bean id="SpringQtzJobMethod" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">          <property name="targetObject">              <ref bean="SpringQtzJob"/>          </property>          <property name="targetMethod">  <!-- 要执行的方法名称 -->              <value>execute</value>          </property>      </bean>      <!-- ======================== 调度触发器 ======================== -->      <bean id="CronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">          <property name="jobDetail" ref="SpringQtzJobMethod"></property>          <property name="cronExpression" value="0/5 * * * * ?"></property>  <!--cron表达式-->    </bean>      <!-- ======================== 调度工厂 ======================== -->      <bean id="SpringJobSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">          <property name="triggers">              <list>                  <ref bean="CronTriggerBean"/>              </list>          </property>      </bean>    

4 测试

在这里我直接写一个类运行它的main方法,在该类中加载sping的配置文件。

@Service@ImportResource("classpath:spring.xml")public class TaskEnter {    @SuppressWarnings("resource")    public static void main(String[] args) throws InterruptedException {        /**         * load spring          */        ApplicationContext context = new AnnotationConfigApplicationContext(TaskEnter.class);        TaskEnter taskEnter = context.getBean(TaskEnter.class);        System.out.println("start process...");        TimeUnit.SECONDS.sleep(10000);    }}

查看运行结果:
这里写图片描述

0 0
原创粉丝点击