已注销用户的gravatar头像
已注销用户 2016-04-12 22:51:07
spring中quartz定时任务的设置详解

写在前面:昨天周一,在地铁上用手机查看自己的几只股票,点进去发现没有数据了,因为这块数据接口是我提供的,心想完了完了,周一就出这样的问题,果不其然到了公司就被老大催着找原因

最后发现是第三方的库崩掉了,我这里请求获取数据一直是null,对此写了一个数据警报的功能,想到了用定时任务去做。

特意抽个时间分享一下,希望可以帮到牛牛们。

先总体看一下配置文件,如下

spring-job.xml配置文件

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:batch="http://www.springframework.org/schema/batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://www.springframework.org/schema/batch

          http://www.springframework.org/schema/batch/spring-batch-3.0.xsd

          http://www.springframework.org/schema/beans

          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" >

          

     <!-- 要调用的工作类 -->

     <bean id="checkStockDataJob" class="api.core.job.CheckStockDataJob" />

     

     <!-- 定义调用对象 和调用对象的方法 -->

     <bean id="checkStockDataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >  

        <property name= "targetObject" ref="checkStockDataJob" /> 

        <property name= "targetMethod" value ="execute"/>  

        <property name= "concurrent" value ="true"/>

     </bean >

     

     <!-- 设置触发时间 -->

     <bean id="checkStockDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >

           <property name= "jobDetail">

               <ref bean= "checkStockDataJobDetail" />

           </property>

           <!-- cron 表达式 -->

           <property name= "cronExpression">

               <value> */30 * * * * ?</value >

           </property>

     </bean >   

     

     <!-- 定时器管理类  autoStartup为true 的时候 自动启动就会执行调度任务 -->

     <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >

           <property name= "triggers"> 

           <list>  

              <ref bean= "checkStockDataTrigger" />

           </list>  

       </property > 

       <property name="autoStartup" value= "true"/>

     </bean >

</beans>

1.

<bean id="checkStockDataJob" class="api.core.job.CheckStockDataJob" />

调用的工作类 指定class路径

 

2.

<bean id="checkStockDataJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" >  

        <property name= "targetObject" ref="checkStockDataJob" /> 

        <property name= "targetMethod" value ="execute"/>  

        <property name= "concurrent" value ="true"/>

     </bean >

 

targetObject:指定调用对象

targetMethod:指定调用方法

concurrent:是否允许job并发允许,如果这里有多个triggers,设置为true的时候是并发处理,如果设置为false则顺序处理。

 

3.

 <!-- cron 表达式 -->
    <property name= "cronExpression">
               <value> */30 * * * * ?</value >
    </property>

Cron-Expressions是用来配置CronTrigger实例。Cron-Expressions是由七段子表达式组成的字符串,描述各个细节计划。这些子字符串由空格分开,每个子字符串表示一个域,分别为:

1 代表秒

2 代表

3 代表

4 代表 几号

5 代表 月份

6 代表 星期几

7 代表 年(可选域)

4.

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >

           <property name= "triggers"> 

           <list>  

              <ref bean= "checkStockDataTrigger" />

           </list>  

       </property > 

       <property name="autoStartup" value= "true"/>

     </bean >

 

triggers:触发器

autoStartup:是否自动启动,true标示自动启动触发器,false反之。

 

调用的工作类

package api.stock.core.job;


/**

 *

 * @author luoy

 *

 */

public class CheckStockDataJob {
    private Logger log = LoggerFactory.getLogger(CheckStockDataJob.class);

    public synchronized void execute(){

        log.info("---------------- 检测数据 Start-------------");



          // do something...       



        log.info("---------------- 检测数据 End-------------");



    }

}

execute:以上指定的方法名

在方法里面就可以写你的业务逻辑了。

小结:简单的分享了一下代码,当然使用定时器有很多种方法,这里就介绍了一下我工作中使用到的一种,其他的方式期待其他的牛牛来分享!


打赏
最近浏览
whmever 2021年6月17日
暂无贡献等级
cuteldv 2021年5月21日
暂无贡献等级
水光浮藻  LV6 2021年4月26日
youwuzuichen  LV10 2019年10月5日
安安an  LV17 2019年7月23日
茫茫人海中的小牛  LV10 2019年3月7日
treeke  LV11 2018年11月14日
wgc_jy  LV21 2018年2月2日
nsq0006  LV6 2017年11月7日
ahao  LV16 2017年10月23日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友