Spring中quartz定时器的使用

时间:2022-12-20 23:33:17
java中的定时器:
定时器:job对应于多个trigger 但是trigger 只能对应一个job。。之后schedule对应于trigger调度定时器。
闲暇时刻,看到spring的官方文档写了一个定时器,感觉蛮好玩的,所以记录一下。
第一步:导包
 <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>  
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context-support</artifactId>
   <version>4.3.7.release</version>
</dependency>
这三个包是必须要导入的,缺一个都不行。
导入之后需要配置xml文件:我的xml文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置job工作和实现方法的源头-- 其中id是随便起的,class是你在工程中的类名,value是该类中的方法名>
<bean id="quartz" class="com.psy.quartz
! .Quartz"/>
<bean id="testTaskJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="quartz"/>
    <property name="targetMethod" value="show"/>
    <property name="concurrent" value="false"/>
</bean>
<!--  
<bean id="testTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
   <property name="jobDetail" ref="testTaskJob"/>
   <property name="cronExpression" value="0/5 * * * * ?"/>
</bean>-->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
    <!-- see the example of method invoking job above -->
    <property name="jobDetail" ref="testTaskJob"/>
    <!-- 10 seconds -->
    <property name="startDelay" value="10000"/>
    <!-- repeat every 50 seconds -->
    <property name="repeatInterval" value="3000"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="simpleTrigger"/>
        </list>
    </property>
</bean>
</beans>
基本步骤:先定义一个job----在根据job定义一个tigger----在定义一个schedule进行调度。其中的ref为上一级的id,上文中已经用相同颜色的字体表表明( 定时器:job对应于多个trigger 但是trigger 只能对应一个job。。之后schedule对应于trigger调度定时器。
下图为我创建的定时任务,与上文中的: <bean id="quartz" class="com.psy.quartz ! .Quartz"/> Spring中quartz定时器的使用
Spring中quartz定时器的使用
测试的结果如下图控制台输出的信息:
Spring中quartz定时器的使用Spring中quartz定时器的使用
那么怎么启动呢?很明显这是有spring管理的,所以当你启动web项目的时候就应该启动,我把这个xml文件导入到sping-config.xml中了
Spring中quartz定时器的使用Spring中quartz定时器的使用
所以当容器一启动加载web.xml的时候便可以纳入spring的管理项目,当然不止这一招,你还可以使用webapplication启动。或者说是加载xml文件,具体的仁者见仁了。
需要说明的是,可以定义多个定时器,配置的方法和单个的定时器是没什么差别的,但是要记住上文红色文字所说明的。多个定时器要配置多个job,可以只配置一个tigger,但是一个tigge只可以对应一个job。下图为schedule配置多个trigger。
Spring中quartz定时器的使用
Spring中quartz定时器的使用
spring的参考文档:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/scheduling.html#scheduling-quartz