文档章节

spring开发定时器任务示例

xiejunbo
 xiejunbo
发布于 2015/04/30 16:49
字数 691
阅读 30
收藏 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
博文 150
码字总数 132363
作品 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+quartz开发定时器

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

罗盛力
2012/12/13
0
0
Spring quartz定时器动态多任务实现

项目中经常会碰到需要定时执行的任务,并且需要执行什么任务,以及任务执行的时间都由用户自定义的需求。quartz是比较常用的定时器工具,并且在spring框架中也已经做了很好的集成,所以在以s...

凯文加内特
2015/06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Go语言_通神之路(2)

1、包 每个Go程序都是由包构成,从main包开始运行,就是我上一篇讲到的,都是从main函数开始执行,但是必须在main包下面! package mainimport ( "fmt" "math/rand")func ...

木九天
昨天
2
0
51.php-fpm的pool 慢日志 open_basedir 进程管理

12.21 php-fpm的pool 12.22 php-fpm慢执行日志(测试时报错) 12.23 open_basedir 12.24 php-fpm进程管理 12.21 php-fpm的pool: php-fpm里的pool也叫池子,咱们之前加入过www的配置,这个w...

王鑫linux
昨天
0
0
java内存模型概述

1、Java虚拟机运行时数据分区图 程序计数器:线程私有,是一块较小的内存空间,它是当前线程所执行的字节码文件的行号指示器 java虚拟机栈:线程私有,其生命周期与线程相同,这也就是我们平...

京一
昨天
0
0
shell学习之test语法

因为if-then语句不能测试退出状态码之外的条件,所以提供了test, 如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0;如果条件不成立,test命令就会退出并返回非零的退出状态...

woshixin
昨天
0
0
openJDK之如何下载各个版本的openJDK源码

如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK的项目 链接...

汉斯-冯-拉特
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部