Spring定时实际项目运用

applicationContext-timer.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	
	<!-- 微博数据抓取 -->
	<bean id="weiboManager" class="com.wiseweb.pom.service.weibo.WeiboStatusManager"></bean>
	<bean id="usersManager" class="com.wiseweb.pom.service.weibo.WeiboUsersManager"></bean>
	<bean id="assignUsersManager" class="com.wiseweb.pom.service.weibo.WeiboAssignUsersManager"></bean>
	<bean id="ntManager" class="com.wiseweb.pom.service.tracking.NegativeTrackingManager"></bean>
	<bean id="classPersonalManager" class="com.wiseweb.pom.service.classify.ClassPersonalManager"></bean>
	<bean id="searchManager" class="com.wiseweb.pom.service.docInfo.SearchManager"></bean>
	<bean id="cacheCountManager" class="com.wiseweb.pom.service.cache.CacheCountManager"></bean>
	<bean id="docInfoManager" class="com.wiseweb.pom.service.docInfo.DocInfoManager"></bean>
	<!-- 微博数据抓取 -->
	<bean id="weiboCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.wiseweb.util.timer.SinaWeiboCrawTimer"></property>
		<property name="jobDataAsMap">
			<map>
				<entry key="weiboManager" value-ref="weiboManager"></entry>
				<entry key="usersManager" value-ref="usersManager"></entry>
				<entry key="assignUsersManager" value-ref="assignUsersManager"></entry>
				<entry key="ntManager" value-ref="ntManager"></entry>
			</map>
		</property>
	</bean>
	<!-- 微博数据抓取 -->
	<bean id="weiboCrawTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="weiboCrawJob"></property>
		<!-- 30分运行一次; -->
		<property name="cronExpression" value="0 0/30 * * * ?" />
	</bean>
	
	<!-- 个人keyword提取 -->
	<bean id="personalCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.wiseweb.util.timer.PersonalCrawTimer"></property>
		<property name="jobDataAsMap">
			<map>
				<entry key="classPersonalManager" value-ref="classPersonalManager"></entry>
				<entry key="searchManager" value-ref="searchManager"></entry>
				<entry key="cacheCountManager" value-ref="cacheCountManager"></entry>
			</map>
		</property>
	</bean>
	<!-- 个人keyword提取 -->
	<bean id="personalTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="personalCrawJob"></property>
		<!-- 30分运行一次; -->
		<property name="cronExpression" value="1 0 0 * * ?" />
	</bean>
	
	<!-- 地图图表信息存储 -->
	<bean id="mapchartCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.wiseweb.util.timer.MapChartCrawTimer"></property>
		<property name="jobDataAsMap">
			<map>
				<entry key="docInfoManager" value-ref="docInfoManager"></entry>
				<entry key="cacheCountManager" value-ref="cacheCountManager"></entry>
				<entry key="searchManager" value-ref="searchManager"></entry>
			</map>
		</property>
	</bean>
	<!-- 地图图表信息存储 -->
	<bean id="mapchartTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="mapchartCrawJob"></property>
		<property name="cronExpression" value="0 10 0 * * ?" />
		<!--<property name="cronExpression" value="0 0/1 * * * ?" />
	--></bean>
	
	<bean id="scheduledFactoryBean"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				 <ref bean="weiboCrawTrigger"/> 
				 <ref bean="personalTrigger"/>  
				 <ref bean="mapchartTrigger"/>
			</list>
		</property>
	</bean>
</beans>		

给出某一个定时类的写法

package com.wiseweb.util.timer;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.wiseweb.pom.entity.CacheCount;
import com.wiseweb.pom.entity.ClassConfigPersonal;
import com.wiseweb.pom.entity.ClassTreePersonal;
import com.wiseweb.pom.entity.ClassTreePersonalKeyword;
import com.wiseweb.pom.entity.ClassifyPersonalRole;
import com.wiseweb.pom.entity.SearchInfo;
import com.wiseweb.pom.service.cache.CacheCountManager;
import com.wiseweb.pom.service.classify.ClassPersonalManager;
import com.wiseweb.pom.service.docInfo.SearchManager;

public class PersonalCrawTimer extends QuartzJobBean{
	private SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd") ;
    private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;
    private ClassPersonalManager classPersonalManager ;
    private SearchManager searchManager ;
    private CacheCountManager cacheCountManager ;
    private Integer order = 1; // 按时间排序
	private String queryValue = "";
	@Override
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		System.out.println("*************执行关键字定时开始***********");
		flushPersonal() ;
		System.out.println("*************执行关键字定时结束***********");
	}
	
	public void flushPersonal() {
		List<ClassConfigPersonal> ccp = this.cacheCountManager.getAllConfig() ;
		//设置时间戳
		Long nowTime = System.currentTimeMillis()/1000 ;
		
		for(ClassConfigPersonal c : ccp) {
			Long userId = c.getUserId() ;
			List<ClassTreePersonal> resultObject = new ArrayList<ClassTreePersonal>() ;
				//根据用户id获取到classConfigPersonal集合
			   List<ClassConfigPersonal> ccps = this.classPersonalManager.findAll(userId);
			   for(int i=0;i<ccps.size();i++) {
				   //个人配置id
				   Long classConfigId = ccps.get(i).getId() ; 
				   //个人配置id & 用户id找到personalRole
				   List<ClassifyPersonalRole> classifyRoles = this.classPersonalManager
							.findByClassConfigRole(userId, classConfigId);
				   List<ClassTreePersonal> classTreePersonals = this.classPersonalManager
							.findAllByClassConfigId(classConfigId);
				   
				   for (int k = 0; k < classTreePersonals.size(); k++) {
						ClassTreePersonal ctn = classTreePersonals.get(k);
						for (int j = 0; j < classifyRoles.size(); j++) {
							if (ctn.getId().equals(
									classifyRoles.get(j).getTreeNodeId())) {
								resultObject.add(ctn) ;
							}
						}
					}
			   }
			int size = resultObject.size() ;
			for(int i=0;i<size;i++) {
				String name = resultObject.get(i).getName() ;
				Long id = resultObject.get(i).getId() ;
				ClassTreePersonalKeyword ctnk2 = this.classPersonalManager.findKeywordBy("nodeNid",Integer.parseInt(id+""));
				SearchInfo searchInfo = ctnk2SearchInfo(ctnk2) ;
				//传入keyword和用户id执行入库操作
				try {
					executeSql(name, searchInfo, userId) ;
				} catch (ParseException e) {
					e.printStackTrace();
				}
			}
		}
		System.out.println("________________________");
		System.out.println("执行操作已完成,进行删除旧数据操作...");
		//执行完后执行删除旧数据操作
		List<Long> deleteIds = this.cacheCountManager.getAllIdForDelete(nowTime) ;
		this.cacheCountManager.delete(deleteIds) ;
		System.out.println("数据删除已完成...");
	}
	
	public void executeSql(String keywordName, SearchInfo searchInfo, Long userId) throws ParseException {
		
		for(int i=30;i>0;i--) {
			String riqi = getStrDate(String.valueOf(i)) ;
			long start = sdf1.parse(riqi).getTime() ;
			long end = sdf2.parse(riqi + " 23:59:59").getTime() ;
			int count = this.searchManager.search(searchInfo,start/1000,end/1000);
			CacheCount cc = new CacheCount() ;
			cc.setkUid(userId) ;
			cc.setkName(keywordName) ;
			cc.setkCount(count + "") ;
			cc.setkTime(riqi) ;
			cc.setkInserttime(System.currentTimeMillis()/1000) ;
			this.cacheCountManager.inStorage(cc) ;
			System.out.println(keywordName + "_" + riqi + "已入库...");
		}
	}
	private SearchInfo ctnk2SearchInfo(ClassTreePersonalKeyword ctnk2) {
	    SearchInfo si = new SearchInfo() ;
	    si.setOrder(this.order);
		if (ctnk2.getQueryAnd() != null
				&& !"".equals(ctnk2.getQueryAnd())) {
			si.setQueryValue(ctnk2.getQueryAnd() + " "
					+ this.queryValue);
		}
		if (ctnk2.getQueryOr() != null
				&& !"".equals(ctnk2.getQueryOr())) {
			si.setOr(ctnk2.getQueryOr());
		}
		if (ctnk2.getQueryNot() != null
				&& !"".equals(ctnk2.getQueryNot())) {
			si.setNot(ctnk2.getQueryNot());
		}
		return si ;
	}
	
	public String getStrDate(String backDay) {
		Calendar calendar = Calendar.getInstance() ;
		calendar.add(Calendar.DATE, Integer.parseInt("-" + backDay));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
		String back = sdf.format(calendar.getTime()) ;
		return back ;
	}

	public ClassPersonalManager getClassPersonalManager() {
		return classPersonalManager;
	}

	public void setClassPersonalManager(ClassPersonalManager classPersonalManager) {
		this.classPersonalManager = classPersonalManager;
	}

	public Integer getOrder() {
		return order;
	}

	public void setOrder(Integer order) {
		this.order = order;
	}

	public String getQueryValue() {
		return queryValue;
	}

	public void setQueryValue(String queryValue) {
		this.queryValue = queryValue;
	}

	public SearchManager getSearchManager() {
		return searchManager;
	}

	public void setSearchManager(SearchManager searchManager) {
		this.searchManager = searchManager;
	}

	public CacheCountManager getCacheCountManager() {
		return cacheCountManager;
	}

	public void setCacheCountManager(CacheCountManager cacheCountManager) {
		this.cacheCountManager = cacheCountManager;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值