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;
	}
}
时间: 2024-10-08 17:37:52

Spring定时实际项目运用的相关文章

Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群

Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 蕃薯耀 2016年7月7日 09:06:09 星期四 http://fanshuya

15 个优秀开源的 Spring Boot 学习项目

Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受欢迎程度可见一斑.经常有人问松哥有没有推荐的 Spring Boot 学习资料?当然有!买松哥书就对了,哈哈. 有需要书籍<Spring Boot+Vue全栈开发实战>PDF版的同学,可以在公众号:Java知己,发送:全栈开发实战,获取该书籍. 除了书呢?当然就是开源项目了,今天松哥整理了几个优质

linux下svn定时更新项目

方法一.用shell脚本定时更新项目 1.进入网站的根目录,假设项目位置放在/var/www/test cd /var/www/test 2.建立脚本文件update.sh,分两步进行.首先利用touch命令创建,之后使用vim进行编辑. touch update.sh vim update.sh 输入以下内容 #!/bin/sh while true do svn update --username 你的svn用户名 --password 你的svn密码 sleep 60 done 这里我设置

Spring+mybatis测试项目总结

1.项目目的a.通过Spring+Mybatis实现通过web访问达成mySql的操作b.理解Spring+Mybatis的配置c.理解maven对项目的管理2.配置文件a.采用maven约定结构,src/main/java.src/main/resources.src/main/test b.基本springMVC+Mybatis需要用到的jar spring-web.spring-webmvc.spring-core.spring-beans.spring-context.spring-co

springmvc+spring+mybatis+maven项目构建

1.首先在myeclipse10中安装maven的插件,将插件放入D:\Program Files (x86)\myEclipse10\MyEclipse Blue Edition 10\dropins\maven中, 2. 新建文件:maven.link填入如下内容:path=D:/Program Files (x86)/myEclipse10/MyEclipse Blue Edition 10/dropins/maven 3.重启myeclipse插件安装成功. 4.在myeclipse10

idea中用maven打包spring的java项目(非web)

之前一直用安装的maven打包spring的javaweb项目,用的是mvn assembly:assembly打包,这次打包非web的spring项目,遇到许多问题,特记录一下正确步骤. 1.配置pom.xml 这里不用assembly,因为assembly在打包时只会把第一次遇到的文件打入jar包,后面遇到的都会skip掉.也就是说assembly把我的Spring描述文件都忽略掉咯.报错就是:找不到 spring-context.xml (我的配置spring的xml),所以这里用 mav

Android5.1和Android6.0定时编译项目方法 (转)

为了不占用开发的时间,我们通常会选择晚上下班后让项目自动编译,那么如何定时编译项目呢.Android5.1和Android6.0定时编译项目的方法是一样的,下面就我本地的C100H_V20(Android5.1)项目工程为例: 首先总体看一下工程下面都有那些文件: 然后打开你的编译脚本,里面的内容如下: [java] view plain copy #update svn cleanup svn up #compile chmod 777 -R ./ source build/envsetup.

IDEA中maven搭建Spring+SpringMVC+mybatis项目

一.介绍 使用IDEA搭建maven web项目,整合框架Spring+SpringMVC+mybatis 项目结构图: 二.搭建 1.新建maven项目 2.创建项目结构(如上图) 3.配置pom.xml 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation=

JAVA8,SPRING,ANGULARJS对项目

java8+spring+angularjs 项目应用 最近有写一个电子订单商务网站,使用JAVA8,SPRING,ANGULARJS对项目使用的技术和大家分享. 第一次写博客,哪有不对需要改正的请联系改正. 因为是项目是我给别人做的无法提供源码见谅,我尽最大努力让大家能看懂. 首先从项目的构建开始,我采用的gradle构建项目,使用的版本是2.4. 开发环境用的IDEA 14,项目数据库使用的是SQL SERVER. Spring Boot 技术文档:http://docs.spring.io