文档章节

spring开发定时器任务示例

xiejunbo
 xiejunbo
发布于 2015/04/30 16:49
字数 691
阅读 31
收藏 0

spring开发定时器任务示例:

spring.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
	<!-- 获取新闻触发器 -->
	<bean id="getNewsTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
	 	<property name="jobDetail">
			<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
				<property name="targetObject" ref="getNewsTask"/>
				<property name="targetMethod" value="execute"/>
				<property name="concurrent" value="false"/>
			</bean>	 	
	 	</property>
	 	<property name="cronExpression" value="0 0 0/2 * * ?"/>
	</bean>

	<!-- 采集明星数据触发器 -->
	<bean id="getStarsTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
	 	<property name="jobDetail">
			<bean class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
				<!-- 指定目标触发器类 -->
				<property name="targetObject" ref="batchGetStarsTask"/>
				<!-- 指定目标触发器类的执行方法 -->
				<property name="targetMethod" value="execute"/>
				<!-- 是否并发执行 -->
				<property name="concurrent" value="false"/>
			</bean>	 	
	 	</property>
	 	<!-- Cron表达式指定触发时间 (定义规则:秒 分 时 日 月 周 年)-->
	 	<property name="cronExpression" value="0 0 0/3 * * ?"/>
	</bean>

	<!-- 任务调度工厂 -->
	<bean id="shedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<!-- 全部触发器放入工厂 -->
				<ref bean="getNewsTrigger"/>
				<ref bean="getStarsTrigger"/>
			</list>
		</property>
	</bean>

</beans>

触发器执行任务类1:BatchGetStarsTask.java

package org.jun.task;

import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Component;

/**
 *
 * @author xiejunbo
 * @email 624664181@qq.com
 **/
@Component
public class BatchGetStarsTask extends AbstractTask {


	public void execute(){
		batchGetStars();
	}
 
	/**
	 * 批量定时抓取明星数据
	 */
	private void batchGetStars() {
		List<String> nameList  = parserService.batchGetNames();
		int nameSize = nameList.size();
		for(int i = 0; i < nameSize; i++) {
			boolean checkResult = parserService.checkAddedStar(nameList.get(i));
			if (!checkResult) {
				String name = nameList.get(i);
				boolean result = parserService.add(name);
				System.out.println(result ? "add baike success" : "add baike fail");
			}
		}
		System.out.println("=====Java=======time:" + new Date());
	}
	
	
}

触发器执行任务类2:GetNewsTask.java

package org.jun.task;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.jun.common.Consts;
import org.jun.domain.NewsList;
import org.jun.utils.HttpClientHelper;
import org.jun.utils.UnicodeUtil;
import org.springframework.stereotype.Component;

/**
 *
 * @author xiejunbo
 * @email 624664181@qq.com
 **/
@Component
public class GetNewsTask extends AbstractTask {

	
	public void execute(){
		getNewsList();
	}
	

	/**
	 * 从一级URL返回数据中解析二级URL及文章内容
	 * @return
	 */
	public String getNewsList() {
		
		//获取新闻ID集合,组装成文章url并存入DB。(id,articleId,articleURL,createAt)
		for(int i = 0; i < Consts.News.baseUrls.length; i++){
			getUrlsByHttp(Consts.News.baseUrls[i], Consts.CHARSET, Consts.News.types[i]);
		}
		return "Complete request success!";
	}
	
	//获取新闻ID并保存
	public String getUrlsByHttp(String listUrl, String charset, String types){
		
		JSONObject content = null;
		try {
			String str = HttpClientHelper.sendRequest(listUrl, charset);
			String str2 = UnicodeUtil.unicodeDecode(str);
			content = JSONObject.fromObject(str2);
		} catch (Exception e1) {
			logger.info("[resolve json error]");
		}
		
		/*Long ret = content.getLong("ret");
		String version = content.getString("version");
		Long timestamp = content.getLong("timestamp");*/
		JSONArray idlist = null;
		try {
			idlist = content.getJSONArray("idlist");
		} catch (Exception e2) {
			logger.info("[getJSONOArray(idlist)error]");
		}
		NewsList newsList = new NewsList();
		try {
			for(int i = 0; i < idlist.size(); i++) {//第1层idlist
				JSONArray newsArray = null;
				try {
					JSONObject newslist =  idlist.getJSONObject(i);
					newsArray = newslist.getJSONArray("newslist");
				} catch (Exception e1) {
					logger.info("[Resolve newslist json error]");
				}
				for(int j = 0; j < newsArray.size(); j++) {//第2层newslist
					JSONObject news = newsArray.getJSONObject(j);
					String aid = news.getString("id");
					boolean result = parserService.checkArticle(aid);
					if( !result ){//文章不存在
						try {
							newsList.setTitle(news.getString("title"));
							newsList.setId(aid);
							newsList.setSurl(news.getString("surl"));
							newsList.setAbstracts(news.getString("abstract"));
							newsList.setTime(news.getString("time"));
							newsList.setTimestamp(news.getString("timestamp"));
							newsList.setSource(news.getString("source"));
							newsList.setThumbnails_big(news.getString("thumbnails_big"));
							newsList.setThumbnails(news.getString("thumbnails"));//大缩略图
							newsList.setTag(news.getString("tag"));//新闻标签
							newsList.setThumbnails_qqnews(news.getString("thumbnails_qqnews"));//列表左小缩略图
							newsList.setThumbnails_qqnews_photo(news.getString("thumbnails_qqnews_photo"));//列表左大缩略图
						} catch (Exception e) {
							logger.info("[JSONObject getProperties error]");
						}
						String contentUrl = newsList.getSurl(); 
						if( contentUrl != null ) {
							String htmlContent = getArticle(contentUrl);
							newsList.setContent(htmlContent);
							newsList.setTypes(types);
							boolean saveResult = parserService.saveNewsList(newsList);
							System.out.println("save news result:" + saveResult);
						}
					}
				}
			}
		} catch (Exception e) {
			logger.info("[CONTENT ERROR]");
		}
       
        //String ids = idlistJson.getString("section");
		//System.out.println("content:" + content);
		//boolean result = parserService.getSecondUrl(Consts.News.baseUrl);
		//return result ? "success" : "fail";
		
		return "success";
	}
	
	/**
	 * 获取新闻文章内容
	 * @return
	 */
	public String getArticle(String url) {
		
		try {
			String str = HttpClientHelper.sendRequest(url, Consts.CHARSET);
			return UnicodeUtil.unicodeDecode(str);
		} catch (Exception e) {
			logger.info("[TencentController.class getArticle error]");
		}
		return null;
	}
	
}


© 著作权归作者所有

共有 人打赏支持
xiejunbo
粉丝 41
博文 149
码字总数 132149
作品 0
广州
后端工程师
SpringMVC框架使用注解执行定时任务

在项目开发过程中,免不了会有一些定时任务。今天就给大家一个SpringMVC框架中利用注解的方式执行定时任务的示例代码 使用到的JAR文件: 点击下列Jar文件会跳到我的网盘下载 aopalliance-1....

Carl_
2015/07/23
0
0
SPRING 定时器应用,使用定时器发送邮件

Spring 的强大又体现出来了,相较于 JDK 定时器来说 SPRING 定时器可以做的更多更好,使用起来也相对复杂,今天就为大家带来一个简易版的定时器,并且使用他实现定时邮件发送功能。 具体详细...

香吉士
2014/06/12
0
10
关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题

关于spring中使用多个quatz配置文件配置计划任务时,只有其中一个文件的任务有效的问题 问题描述 工作中用到了spring与quatz来实现定时器触发一些计划任务,原本都写在一个配置文件里。后来将...

Tek_Eternal
2015/02/20
0
0
Spring Cloud 2.x系列之springboot集成quartz

java设计模式之观察者模式 一大波视频分享 Mysql代理中间件Atlas安装和配置 在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的。定时任务常用的业务场...

技术小能手
10/15
0
0
基于spring+quartz开发定时器

基于spring+quartz开发定时器 1、准备Jar包 在Spring所有包齐全的前提下还要导入一个定时器工具包:quartz-1.6.2.jar http://www.opensymphony.com/quartz/download.action 2、开发定时器类,...

罗盛力
2012/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux安装MySQL的两种方法

1. 运行平台:CentOS 6.3 x86_64,基本等同于RHEL 6.3 2. 安装方法: 安装MySQL主要有两种方法:一种是通过源码自行编译安装,这种适合高级用户定制MySQL的特性,这里不做说明;另一种是通过...

onedotdot
22分钟前
4
0
phpize源码安装php扩展

4、进入源码中的ext/pcntl目录 ~# cd php-5.3.29/ext/pcntl/ 5、运行 phpize 命令 ~# phpizeConfiguring for:PHP Api Version: 20090626Zend Module Api No: 20090626......

bengozhong
30分钟前
2
0
Git 常用技巧

# Git 常用技巧 ## 暖场 - Git 怎么读 ? - Git 的作者是谁 ? - 谁没有 Github 账号 ? - 谁没有在 Github 提交过 issues,PR ? - 谁没有不会用命令操作 Git ? ## Git 简介 Git 是一种代码...

帝子兮
43分钟前
2
0
MySQL学习笔记

踩坑建议 对于时间相关字段,为插入及显示毫秒数据,建议使用datetime(6)类型,并设置数据库客户端显示毫秒相关数据

OSC_fly
43分钟前
0
0
spring配置文件中xsd引用异常

异常: org.xml.sax.SAXParseException; lineNumber: 78; columnNumber: 69; schema_reference.4: 无法读取方案文档 'http://www.springframework.org/schema/tx/spring-tx-3.2.xsd', 原因为......

zaolonglei
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部