Spring定时实际项目运用

简介:

applicationContext-timer.xml

[html]  view plain  copy
 print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">  
  3. <beans>  
  4.       
  5.     <!-- 微博数据抓取 -->  
  6.     <bean id="weiboManager" class="com.wiseweb.pom.service.weibo.WeiboStatusManager"></bean>  
  7.     <bean id="usersManager" class="com.wiseweb.pom.service.weibo.WeiboUsersManager"></bean>  
  8.     <bean id="assignUsersManager" class="com.wiseweb.pom.service.weibo.WeiboAssignUsersManager"></bean>  
  9.     <bean id="ntManager" class="com.wiseweb.pom.service.tracking.NegativeTrackingManager"></bean>  
  10.     <bean id="classPersonalManager" class="com.wiseweb.pom.service.classify.ClassPersonalManager"></bean>  
  11.     <bean id="searchManager" class="com.wiseweb.pom.service.docInfo.SearchManager"></bean>  
  12.     <bean id="cacheCountManager" class="com.wiseweb.pom.service.cache.CacheCountManager"></bean>  
  13.     <bean id="docInfoManager" class="com.wiseweb.pom.service.docInfo.DocInfoManager"></bean>  
  14.     <!-- 微博数据抓取 -->  
  15.     <bean id="weiboCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
  16.         <property name="jobClass" value="com.wiseweb.util.timer.SinaWeiboCrawTimer"></property>  
  17.         <property name="jobDataAsMap">  
  18.             <map>  
  19.                 <entry key="weiboManager" value-ref="weiboManager"></entry>  
  20.                 <entry key="usersManager" value-ref="usersManager"></entry>  
  21.                 <entry key="assignUsersManager" value-ref="assignUsersManager"></entry>  
  22.                 <entry key="ntManager" value-ref="ntManager"></entry>  
  23.             </map>  
  24.         </property>  
  25.     </bean>  
  26.     <!-- 微博数据抓取 -->  
  27.     <bean id="weiboCrawTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  28.         <property name="jobDetail" ref="weiboCrawJob"></property>  
  29.         <!-- 30分运行一次; -->  
  30.         <property name="cronExpression" value="0 0/30 * * * ?" />  
  31.     </bean>  
  32.       
  33.     <!-- 个人keyword提取 -->  
  34.     <bean id="personalCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
  35.         <property name="jobClass" value="com.wiseweb.util.timer.PersonalCrawTimer"></property>  
  36.         <property name="jobDataAsMap">  
  37.             <map>  
  38.                 <entry key="classPersonalManager" value-ref="classPersonalManager"></entry>  
  39.                 <entry key="searchManager" value-ref="searchManager"></entry>  
  40.                 <entry key="cacheCountManager" value-ref="cacheCountManager"></entry>  
  41.             </map>  
  42.         </property>  
  43.     </bean>  
  44.     <!-- 个人keyword提取 -->  
  45.     <bean id="personalTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  46.         <property name="jobDetail" ref="personalCrawJob"></property>  
  47.         <!-- 30分运行一次; -->  
  48.         <property name="cronExpression" value="1 0 0 * * ?" />  
  49.     </bean>  
  50.       
  51.     <!-- 地图图表信息存储 -->  
  52.     <bean id="mapchartCrawJob" class="org.springframework.scheduling.quartz.JobDetailBean">  
  53.         <property name="jobClass" value="com.wiseweb.util.timer.MapChartCrawTimer"></property>  
  54.         <property name="jobDataAsMap">  
  55.             <map>  
  56.                 <entry key="docInfoManager" value-ref="docInfoManager"></entry>  
  57.                 <entry key="cacheCountManager" value-ref="cacheCountManager"></entry>  
  58.                 <entry key="searchManager" value-ref="searchManager"></entry>  
  59.             </map>  
  60.         </property>  
  61.     </bean>  
  62.     <!-- 地图图表信息存储 -->  
  63.     <bean id="mapchartTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  64.         <property name="jobDetail" ref="mapchartCrawJob"></property>  
  65.         <property name="cronExpression" value="0 10 0 * * ?" />  
  66.         <!--<property name="cronExpression" value="0 0/1 * * * ?" /> 
  67.     --></bean>  
  68.       
  69.     <bean id="scheduledFactoryBean"  
  70.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  71.         <property name="triggers">  
  72.             <list>  
  73.                  <ref bean="weiboCrawTrigger"/>   
  74.                  <ref bean="personalTrigger"/>    
  75.                  <ref bean="mapchartTrigger"/>  
  76.             </list>  
  77.         </property>  
  78.     </bean>  
  79. </beans>        

给出某一个定时类的写法

[html]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.wiseweb.util.timer;  
  2.   
  3. import java.text.ParseException;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.ArrayList;  
  6. import java.util.Calendar;  
  7. import java.util.List;  
  8.   
  9. import org.quartz.JobExecutionContext;  
  10. import org.quartz.JobExecutionException;  
  11. import org.springframework.scheduling.quartz.QuartzJobBean;  
  12.   
  13. import com.wiseweb.pom.entity.CacheCount;  
  14. import com.wiseweb.pom.entity.ClassConfigPersonal;  
  15. import com.wiseweb.pom.entity.ClassTreePersonal;  
  16. import com.wiseweb.pom.entity.ClassTreePersonalKeyword;  
  17. import com.wiseweb.pom.entity.ClassifyPersonalRole;  
  18. import com.wiseweb.pom.entity.SearchInfo;  
  19. import com.wiseweb.pom.service.cache.CacheCountManager;  
  20. import com.wiseweb.pom.service.classify.ClassPersonalManager;  
  21. import com.wiseweb.pom.service.docInfo.SearchManager;  
  22.   
  23. public class PersonalCrawTimer extends QuartzJobBean{  
  24.     private SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd") ;  
  25.     private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") ;  
  26.     private ClassPersonalManager classPersonalManager ;  
  27.     private SearchManager searchManager ;  
  28.     private CacheCountManager cacheCountManager ;  
  29.     private Integer order = 1; // 按时间排序  
  30.     private String queryValue = "";  
  31.     @Override  
  32.     protected void executeInternal(JobExecutionContext arg0)  
  33.             throws JobExecutionException {  
  34.         System.out.println("*************执行关键字定时开始***********");  
  35.         flushPersonal() ;  
  36.         System.out.println("*************执行关键字定时结束***********");  
  37.     }  
  38.       
  39.     public void flushPersonal() {  
  40.         List<ClassConfigPersonal> ccp = this.cacheCountManager.getAllConfig() ;  
  41.         //设置时间戳  
  42.         Long nowTime = System.currentTimeMillis()/1000 ;  
  43.           
  44.         for(ClassConfigPersonal c : ccp) {  
  45.             Long userId = c.getUserId() ;  
  46.             List<ClassTreePersonal> resultObject = new ArrayList<ClassTreePersonal>() ;  
  47.                 //根据用户id获取到classConfigPersonal集合  
  48.                List<ClassConfigPersonal> ccps = this.classPersonalManager.findAll(userId);  
  49.                for(int i=0;i<ccps.size();i++) {  
  50.                    //个人配置id  
  51.                    Long classConfigId = ccps.get(i).getId() ;   
  52.                    //个人配置id & 用户id找到personalRole  
  53.                    List<ClassifyPersonalRole> classifyRoles = this.classPersonalManager  
  54.                             .findByClassConfigRole(userId, classConfigId);  
  55.                    List<ClassTreePersonal> classTreePersonals = this.classPersonalManager  
  56.                             .findAllByClassConfigId(classConfigId);  
  57.                      
  58.                    for (int k = 0; k < classTreePersonals.size(); k++) {  
  59.                         ClassTreePersonal ctn = classTreePersonals.get(k);  
  60.                         for (int j = 0; j < classifyRoles.size(); j++) {  
  61.                             if (ctn.getId().equals(  
  62.                                     classifyRoles.get(j).getTreeNodeId())) {  
  63.                                 resultObject.add(ctn) ;  
  64.                             }  
  65.                         }  
  66.                     }  
  67.                }  
  68.             int size = resultObject.size() ;  
  69.             for(int i=0;i<size;i++) {  
  70.                 String name = resultObject.get(i).getName() ;  
  71.                 Long id = resultObject.get(i).getId() ;  
  72.                 ClassTreePersonalKeyword ctnk2 = this.classPersonalManager.findKeywordBy("nodeNid",Integer.parseInt(id+""));  
  73.                 SearchInfo searchInfo = ctnk2SearchInfo(ctnk2) ;  
  74.                 //传入keyword和用户id执行入库操作  
  75.                 try {  
  76.                     executeSql(name, searchInfo, userId) ;  
  77.                 } catch (ParseException e) {  
  78.                     e.printStackTrace();  
  79.                 }  
  80.             }  
  81.         }  
  82.         System.out.println("________________________");  
  83.         System.out.println("执行操作已完成,进行删除旧数据操作...");  
  84.         //执行完后执行删除旧数据操作  
  85.         List<Long> deleteIds = this.cacheCountManager.getAllIdForDelete(nowTime) ;  
  86.         this.cacheCountManager.delete(deleteIds) ;  
  87.         System.out.println("数据删除已完成...");  
  88.     }  
  89.       
  90.     public void executeSql(String keywordName, SearchInfo searchInfo, Long userId) throws ParseException {  
  91.           
  92.         for(int i=30;i>0;i--) {  
  93.             String riqi = getStrDate(String.valueOf(i)) ;  
  94.             long start = sdf1.parse(riqi).getTime() ;  
  95.             long end = sdf2.parse(riqi + " 23:59:59").getTime() ;  
  96.             int count = this.searchManager.search(searchInfo,start/1000,end/1000);  
  97.             CacheCount cc = new CacheCount() ;  
  98.             cc.setkUid(userId) ;  
  99.             cc.setkName(keywordName) ;  
  100.             cc.setkCount(count + "") ;  
  101.             cc.setkTime(riqi) ;  
  102.             cc.setkInserttime(System.currentTimeMillis()/1000) ;  
  103.             this.cacheCountManager.inStorage(cc) ;  
  104.             System.out.println(keywordName + "_" + riqi + "已入库...");  
  105.         }  
  106.     }  
  107.     private SearchInfo ctnk2SearchInfo(ClassTreePersonalKeyword ctnk2) {  
  108.         SearchInfo si = new SearchInfo() ;  
  109.         si.setOrder(this.order);  
  110.         if (ctnk2.getQueryAnd() != null  
  111.                 && !"".equals(ctnk2.getQueryAnd())) {  
  112.             si.setQueryValue(ctnk2.getQueryAnd() + " "  
  113.                     + this.queryValue);  
  114.         }  
  115.         if (ctnk2.getQueryOr() != null  
  116.                 && !"".equals(ctnk2.getQueryOr())) {  
  117.             si.setOr(ctnk2.getQueryOr());  
  118.         }  
  119.         if (ctnk2.getQueryNot() != null  
  120.                 && !"".equals(ctnk2.getQueryNot())) {  
  121.             si.setNot(ctnk2.getQueryNot());  
  122.         }  
  123.         return si ;  
  124.     }  
  125.       
  126.     public String getStrDate(String backDay) {  
  127.         Calendar calendar = Calendar.getInstance() ;  
  128.         calendar.add(Calendar.DATE, Integer.parseInt("-" + backDay));  
  129.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;  
  130.         String back = sdf.format(calendar.getTime()) ;  
  131.         return back ;  
  132.     }  
  133.   
  134.     public ClassPersonalManager getClassPersonalManager() {  
  135.         return classPersonalManager;  
  136.     }  
  137.   
  138.     public void setClassPersonalManager(ClassPersonalManager classPersonalManager) {  
  139.         this.classPersonalManager = classPersonalManager;  
  140.     }  
  141.   
  142.     public Integer getOrder() {  
  143.         return order;  
  144.     }  
  145.   
  146.     public void setOrder(Integer order) {  
  147.         this.order = order;  
  148.     }  
  149.   
  150.     public String getQueryValue() {  
  151.         return queryValue;  
  152.     }  
  153.   
  154.     public void setQueryValue(String queryValue) {  
  155.         this.queryValue = queryValue;  
  156.     }  
  157.   
  158.     public SearchManager getSearchManager() {  
  159.         return searchManager;  
  160.     }  
  161.   
  162.     public void setSearchManager(SearchManager searchManager) {  
  163.         this.searchManager = searchManager;  
  164.     }  
  165.   
  166.     public CacheCountManager getCacheCountManager() {  
  167.         return cacheCountManager;  
  168.     }  
  169.   
  170.     public void setCacheCountManager(CacheCountManager cacheCountManager) {  
  171.         this.cacheCountManager = cacheCountManager;  
  172.     }  
  173. }  
目录
相关文章
|
8天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
19 2
|
1月前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
34 1
Spring MVC——项目创建和建立请求连接
|
1月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
119 1
Maven——创建 Spring Boot项目
|
1月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
26 1
如何使用 maven 创建一个 Spring Boot项目
|
1月前
|
Java 应用服务中间件 Android开发
Eclipse创建Spring项目
本文介绍了在Eclipse中创建Spring项目的步骤,包括如何配置Tomcat服务器、创建项目、部署项目到Tomcat以及添加Spring框架所需的JAR包。
53 1
Eclipse创建Spring项目
|
1月前
|
Java Spring
ij社区版如何创建spring项目
如何在IntelliJ IDEA社区版中创建Spring项目,包括安装Spring Boot Helper插件的步骤和创建过程。
66 1
ij社区版如何创建spring项目
|
1月前
|
Java 调度 开发者
spring的@Scheduled()有几种定时模式?
【10月更文挑战第12天】spring的@Scheduled()有几种定时模式?
72 1
|
1月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
56 2
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
170 2