文档章节

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
粉丝 43
博文 149
码字总数 132149
作品 0
广州
后端工程师
私信 提问
SpringMVC框架使用注解执行定时任务

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

Carl_
2015/07/23
0
0
分布式定时任务框架---Uncode Schedule

分布式定时任务框架---Uncode Schedule rabbitGYK 关注 2016.11.27 20:36* 字数 1446 阅读 7141评论 5喜欢 36赞赏 1 博客原文 作为一个支付公司的项目组,经常会有很多对账功能(签约对账、支...

晨猫
11/02
0
0
用Spring定时器写了个程序,查询数据库固定次数后,内存溢出

该程序是用Spring定时器执行的,定时用hibernate框架查询数据库,将查询到的结果写成文本文件。 启动定时器之后每次在生成了52个文本文件之后,就内存溢出了。 由于代码不多我直接贴代码和错...

颜可
2014/07/23
4.3K
4
SPRING 定时器应用,使用定时器发送邮件

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

香吉士
2014/06/12
0
10
Spring Cloud 2.x系列之springboot集成quartz

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

技术小能手
10/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二十分钟教你如何将区块链应用与函数计算相结合

前言 本篇文章适合对区块链应用感兴趣或是想要通过函数计算服务进一步开发区块链应用的新人。本文将结合阿里云区块链服务、阿里云函数计算服务、阿里云日志服务 以及社区应用 Marbles,手把手...

阿里云官方博客
6分钟前
1
0
Double数相加后结果不准确

在我们进行两个double运算时,例如:2..0-1.1 不是想象的输出0.9,而是0.89999999999999999。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十...

嘴角轻扬30
14分钟前
1
0
去除移动端点击效果

移动端点击时,会有一个类似active的短暂背景淡出效果,去除该效果可使用 -webkit-tap-highlight-color: rgba(255, 0, 0, 0);

originDu
16分钟前
1
0
腾讯云与MariaDB 基金会签署战略合作,共建全球开源生态圈

本文由云+社区发表 腾讯云日前与MariaDB基金会正式签署战略合作协议,2019年,腾讯云将继续以白金会员身份为基金会的发展提供强有力的资源支持,与MariaDB全球用户和开发者一道,共建开放共赢...

腾讯云加社区
20分钟前
1
0
Kotlin的SAM(Single Abstract Method)

今天有人在群里问kotlin支持SAM的问题,其实kotlin不支持SAM,因为人家支持FP(function programing) package reactinterface Test { fun print()}class TestInterface(var...

SuShine
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部