已注销用户
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:以上指定的方法名
在方法里面就可以写你的业务逻辑了。
小结:简单的分享了一下代码,当然使用定时器有很多种方法,这里就介绍了一下我工作中使用到的一种,其他的方式期待其他的牛牛来分享!
评论