spring开发定时器任务示例
博客专区 > xiejunbo 的博客 > 博客详情
spring开发定时器任务示例
xiejunbo 发表于2年前
spring开发定时器任务示例
  • 发表于 2年前
  • 阅读 29
  • 收藏 0
  • 点赞 0
  • 评论 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;
	}
	
}


共有 人打赏支持
粉丝 39
博文 132
码字总数 121552
×
xiejunbo
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: