项目有定时任务的需求,对比了Timer、Quartz和SpringTask之后使用了SpringTask来配置定时任务。理由很简单,就是简单!在Spring下简单的一个Xml配置文件或者是注解就能完成功能。
定时的任务是定时通过百度API获取某企业的股票价格..
项目现状:
- 项目开启了注解
- 调用接口类通过xml配置纳入Spring进行管理
- 定时任务暂时使用SpringTask
- 股价获取接口
package com.xxx.oil.task;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.xxx.oil.service.OilService;
import com.xxx.oil.service.StockService;
/**
* 定时任务使用,已注册在conf/plugin/task/context-task.xml
*/
public class SipcTimerTask {
private static final Logger logger = LoggerFactory.getLogger(SipcTimerTask.class);
public SipcTimerTask() {
}
/**
* 获取石化股价
*/
public void saveStockTask() {
service.saveStock();
}
/**
* 获取原油价格
*/
public void saveOilPriceTask() {
try {
oilService.setBrentOil();
} catch (IOException e) {
logger.error("定时任务出错:获取布伦特原油价格出错!");
e.printStackTrace();
}
try {
oilService.setNYOil();
} catch (IOException e) {
logger.error("定时任务出错:获取布伦特原油价格出错!");
e.printStackTrace();
}
}
@Autowired
private StockService service;
@Autowired
private OilService oilService;
}
- 配置文件
<?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:util="http://www.springframework.org/schema/util"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 获取石化股票和原油价格等信息定时任务 -->
<bean id="sipcTimerTask" class="com.xxx.oil.task.SipcTimerTask"/>
<task:scheduled-tasks>
<!-- cron值编写
1.cron共有6个必选和1个可选域,分别是(秒,分,时,日期,月份,星期,年(可选域))
2.cron允许的值,
秒(0-59),分(0-59),时(0-12),日期(1-31),月份(1-12或者JAN-DEC),星期(1-7或者SUN-SAT),年( 留空或者 1970-2099 )
3.cron允许的连接字符,(- * / )这三个基本上都有,(?)只有日期和星期使用,解决两个域使用时值冲突的问题,日期和星期只用一种
( L C )只在日期星期使用,L月的最后一天,C指定一个日历,(W)只在日期中使用,表示工作日,(#)只在星期中使用,表示指定具体星期例如(3#2)本月第二个星期的周二(3表示周二)
4.(- * /)-表示between..and..,*表示per,/表示增量,例如(在分钟域0 0-5 12 * * ?)表示每天的12:00到12:05每分钟触发,在秒域0/15表示每分钟0,15,30,45触发
-->
<task:scheduled ref="sipcTimerTask" method="saveStockTask" cron="0 0/15 9-16 ? * 1-5" />
<!-- 每15分钟更新一次 -->
<task:scheduled ref="sipcTimerTask" method="saveOilPriceTask" cron="0 0/15 * ? * 1-7" />
</task:scheduled-tasks>
</beans>
- 启动项目就能启动定时任务,到此结束,是不是很简单
项目中还是用到的Quartz,有机会再整理有关Quartz的使用和配置