美文网首页
springQuartz定时器

springQuartz定时器

作者: 靈08_1024 | 来源:发表于2017-05-06 15:03 被阅读70次

    版本springframework:4.2.2.RELEASE;quartz:2.2.2.参见 定时器

    1、依赖:

    spring核心包

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    springJob包
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>     
        <version>${springframework.version}</version>
    </dependency>
    spring事务包
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${springframework.version}</version>
    </dependency>
    quartz包
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>${quartz.version}</version>
    </dependency>
    
    2、Job调度类的创建:

    创建调度类并继承QuartzJobBean类,并实现其方法,在其方法中写自己的调度。

    3、spring-quartz.xml的编写(使用corn表达式):

    1)容器扫描写job的文件夹;
    2)创建描述自己调度详情的bean标签,类为JobDetailFactoryBean。
    bean标签内部,基本的property名为jobClass,指向自己的调度类。
    3)创建调度对应的触发器(调度与触发器时一对一的关系)类为CronTriggerFactoryBean。
    bean标签内部,基本property名为jobDetail,指向自己的调度bean标签。
    基本property名为cronExpression,调度表达式。
    4)集结所有的调度bean和trigger:
    创建bean标签,没有id,只有类名,SchedulerFactoryBean。
    bean标签内部,基本property名为jobDetails,内部<list>标签,list标签内罗列所有的调度bean。
    基本property名为triggers,内部<list>标签,List标签内罗列所有的调度触发器bean。
    使用corn表达式的灵活示例:

    <context:component-scan base-package="org.seckill.job"/>
    
        <bean id="firstComplexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <property name="jobClass" value="org.seckill.job.FirstScheduledJob"/>
            <property name="jobDataMap">
                <map>
                    <entry key="anotherBean" value-ref="anotherBean"/>
                </map>
            </property>
            
            <property name="durability" value="true"/>
        </bean>
    
        <bean id="secondJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <property name="jobClass" value="org.seckill.job.SecondScheduledJob"/>
    
            <property name="durability" value="true"/>
        </bean>
    
        <!--两个触发器-->
        <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="firstComplexJobDetail"/>
            <property name="cronExpression" value="0/15 * * ? * *"/>
        </bean>
    
        <bean id="secondCornTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="secondJobDetail"/>
            <property name="cronExpression" value="0 0/1 * ? * *"/>
        </bean>
    
        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="jobDetails">
                <list>
                    <ref bean="firstComplexJobDetail"/>
                    <ref bean="secondJobDetail"/>
                </list>
            </property>
    
            <property name="triggers">
                <list>
                    <ref bean="cronTrigger"/>
                    <ref bean="secondCornTrigger"/>
                </list>
            </property>
        </bean>
    

    附带不使用corn表达式的示例:
    由于不适用的比较简单,看配置文件就可以明白了,所以不做赘述。

    <context:component-scan base-package="org.seckill.job"/>
        <bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="myBean"/>
            <property name="targetMethod" value="printMessage"/>
        </bean>
    
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="simpleJobDetail"/>
        <!--开始时间为启动后1000ms-->
        <property name="startDelay" value="1000"/>
        <!--重复调度时间为2000ms-->
        <property name="repeatInterval" value="2000"/>
    </bean>
    
        <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="jobDetails">
                <list>
                    <ref bean="simpleJobDetail"/>
                </list>
            </property>
            
            <property name="triggers">
                <list>
                    <ref bean="simpleTrigger"/>
                </list>
            </property>
        </bean>
    
    4、调用:

    新建一类,写一main方法,引入spring-quartz.xml文件。即可完成调用。

    5、调度表达式:

    一个调度表达式至少有6个(可能还是7个,最后一位是年,看情况需要),用空格分隔开,依次为 秒 分 时 日 月 周 年。参见 调度表达式
    在每一位上的具体数值,必须得等到系统日期到达该时间时才会触发。

    在周位上,从1-7,表示从SUN-SAT(周日-周六)。
    1. 通配符,表达式匹配任意可能的值;
    2. / 表示递增,如在秒位上0/15,表示从第0秒开始(按照系统时间,而非启动的精确时间),每隔15秒触发依次。
    3. ,表示该位置有多个单独的值。如在秒位上15,25,35表示第15,25,35秒。
    4. - 表示区间。如在秒位上15-30表示第15秒到第30秒。
    5. ?仅用于 日 或者 周 上,当两者中任一为
    ,另外一个就得为?,防止冲突。
    6. L 仅用于 日 或者 周 上,表示“last”。如在日上L表示最后一天,6L表示本月倒数第6天,在周上L表示SAT(周六),6L或FRIL表示本月最后一个周五。
    7. # 仅用于 周 上,如6#3表示第三个周五。如果表示的值超出范围,忽略。
    8. W 仅用于日 上,表示在本月中,离工作日(周一到周五)最近的一天,可前可后,若当天即工作日,当天触发。

    6、常用的调度表达式
    意义 表达式
    每月的第一天的0点0分0秒 0 0 0 1 * ?

    相关文章

      网友评论

          本文标题:springQuartz定时器

          本文链接:https://www.haomeiwen.com/subject/phpetxtx.html