• ssh中使用spring的集成quartz 编写定时任务


    之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务。刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quartz工具,非常方便。好了,废话不多说,说一下开发过程。

    首先,需要建一个资源配置xml文件,一般以quartz结尾。如我项目中的该文件名为:applicationContext-bms-sendxml-quartz.xml,别忘了在applicationContext.xml文件中导入该文件。applicationContext-bms-sendxml-quartz.xml文件配置如下

    1.配置调度工厂,这个bean是生成spring集成quartz的工具类org.springframework.scheduling.quartz.SchedulerFactoryBean的对象,用于管理调度对象。

        <!-- 配置调度工厂 -->
        <bean id="startQuertz"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="ContentInjectResponseTrigger" />
                </list>
            </property>
        </bean>

    2.配置调度任务。这个调度任务有两个不同的实现类,分别是org.springframework.scheduling.quartz.SimpleTriggerBean和org.springframework.scheduling.quartz.CronTriggerBean,区别为:
     SimpleTrigger:当需要在规定的时间执行一次或在规定的时间段以一定的时间间隔重复触发执行Job时, 

    CronTriggerBean:  CronTrigger  支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔。具体配置如下

    采用org.springframework.scheduling.quartz.SimpleTriggerBean:

    <bean id="CheckAssetStatusTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
            <property name="jobDetail" ref="jobAssetStatusCheck" />
            <property name="startDelay" value="60000" />
            <!-- 调度工厂实例化后,经过0秒开始执行调度 -->
            <property name="repeatInterval" value="600000" />
            <!-- 每5分钟调度一次 -->
        </bean>

    采用org.springframework.scheduling.quartz.CronTriggerBean:

    <bean id="ContentInjectResponseTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
         <property name="cronExpression">
              <value>${QueryContentResponseCronExpression}</value>
         </property>
         <property name="jobDetail" ref="autoQueryContentResponseJob"/>
         </bean>

    如上代码中的cronExpression参数就是配置任务时间参数,具体见我关于两个触发器的其他博文

    3.配置具体的调度事项,即上面代码的autoQueryContentResponseJob类

    <bean id="autoQueryContentResponseJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
        <bean class="com.avit.mmsp.common.message.CallBackInjectResultJob"/>
        </property>
        <property name="targetMethod" value="execute"/>
        <property name="concurrent" value="false"/>
        </bean>

    targetObject为目标类,targetMethod即为任务执行方法。concurrent参数表示是否并发调度,false表示不并发。好了,看看这个任务实现类和实现方法:

    package com.avit.mmsp.common.message;
    
    import javax.inject.Inject;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;
    
    import com.avit.mmsp.common.datasource.CustomerContextHolder;
    import com.avit.mmsp.common.message.service.ContentInjectResponseService;
    
    public class CallBackInjectResultJob {
        
    
        private static Logger log = LoggerFactory.getLogger(SendMessageJob.class);
        @Inject
        private  ContentInjectResponseService contentInjectResponseService;
        
        public void execute() {
            CustomerContextHolder.setCustomerType(CustomerContextHolder.CMS_DATA_SOURCE);
            try {
                log.info("查询内容注入结果开始");
                contentInjectResponseService.injectResponse();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            
        }
        
    }

    具体的实现就不贴出来了。over,如有异议可留言交流

  • 相关阅读:
    30个热门的CSS3 Image Hover 脚本
    70个jQuery触摸事件插件 支持手势触摸!
    40个超酷的jQuery动画教程
    45个漂亮且有创意的HTML5网站展示
    40+极具创意的产品展示PSD模板
    25个开始学习HTMLE5的最好的资源
    25个很酷的jQuery倒计时脚本–添加动态计数器!
    45个wordpress自适应插件
    30+WordPress古典风格的主题古典却不失时尚
    为kindeditor上传图片添加水印(PHP版)
  • 原文地址:https://www.cnblogs.com/binggu/p/4608165.html
Copyright © 2020-2023  润新知