• quartz spring


    简单例子可参考

    http://yangpanwww.iteye.com/blog/797563

    http://liuzidong.iteye.com/blog/1118992

    关于时间配置可参考另一篇http://www.cnblogs.com/stit/p/4013398.html

    我的项目的应用

     1 knowledge-schedule.xml 不要忘了在spring总配置文件中引入

    调度工厂没有加lazy-init="false"   

    <!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   -->  

    <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" 

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
         
         <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
            <property name="corePoolSize" value="5"/>
            <property name="keepAliveSeconds"  value="200"/>
            <property name="maxPoolSize"  value="50"/>
            <property name="queueCapacity"  value="60"/>
        </bean>
        
        <!-- 排行统计start -->
        <bean id="methodSchedulerFactory_StatisticsInfoHotReply"
            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="rankTask" />
            <property name="targetMethod" value="startStatistics" />
            <property name="arguments" value="info" />
        </bean>
    
        <bean id="cronTriggerBean_StatisticsInfoHotReply" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail" ref="methodSchedulerFactory_StatisticsInfoHotReply" />
            <property name="cronExpression" value="* * 2 * * ?" /> <!--每晚2点一次 --> 
        </bean>
        <!-- 排行统计end -->
        
        <!-- 栏目定时统计订阅数开始 -->
        <bean id="columnJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
            <property name="targetObject" ref="columnTimerTasker" />  
            <property name="targetMethod" value="execute" />  
            <!--将并发设置为false-->  
            <property name="concurrent" value="false" />  
        </bean>  
      
        <bean id="columnJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
            <property name="jobDetail" ref="columnJobDetail" />  
             <!--表达式,每30分钟 执行一次   --> 
            <property name="cronExpression" value="0 7/30 * * * ?" />
        </bean>  
        <!-- 栏目定时统计订阅数结束 -->
    
        <!--调度工厂 -->
        <bean id="SpringJobSchedulerFactoryBean"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="cronTriggerBean_StatisticsInfoHotReply" />
                    <ref bean="columnJobTrigger" />
                </list>
            </property>
        </bean>
    </beans>

    2 ColumnTimerTasker 

    package com.ginkgocap.ywxt.knowledge.util;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.quartz.JobExecutionException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import com.ginkgocap.ywxt.knowledge.entity.Column;
    import com.ginkgocap.ywxt.knowledge.mapper.ColumnMapper;
    import com.ginkgocap.ywxt.knowledge.service.ColumnService;
    import com.ginkgocap.ywxt.knowledge.service.ColumnSubscribeService;
    
    @Component("columnTimerTasker")
    public class ColumnTimerTasker {
    
        @Resource
        ColumnService cs;
        @Resource
        ColumnSubscribeService subcs;
        @Autowired
        ColumnMapper columnMapper;
        
        boolean b=true;
    
        public void execute() throws JobExecutionException {
            
            SimpleDateFormat f=new SimpleDateFormat("E yyyy-MM-dd HH:mm:ss");
            Date date=new Date();
            
            System.out.println("ColumnTimerTasker.execute()   "+f.format(date)+"   ");
            
    //        if (!b) {
    //            return;
    //        }
            
            List<Column> list= cs.queryAll();
            
            for (int i = 0; i < list.size(); i++) {
                Column c=list.get(i);
               
                long count=subcs.countByKC(c.getId());
                
    //            if (count>0) {
    //                System.out.print(c.getId()+"---");
    //                System.out.println(count);
    //            }
                
                Column cc=new Column();
                cc.setId(c.getId());
                cc.setSubscribeCount(count);
                
    //            if (b) {
    //                columnMapper.updateByPrimaryKeySelective(cc);
    //            }else {
    //                if (count>0) {
    //                    columnMapper.updateByPrimaryKeySelective(cc);
    //                }
    //            }
                
                if (b||count>0) {
                    columnMapper.updateByPrimaryKeySelective(cc);
                }
                
            }
            
            if (b) {
                b=false;
            }
        }
    
    }

    3另一哥们写的RankTask,用到了线程池

    package com.ginkgocap.ywxt.knowledge.util;
    
    
    import java.util.concurrent.Future;
    
    import javax.annotation.Resource;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import org.springframework.stereotype.Component;
      
    /**
     * 排行任务
     * <p>于2014-9-11 由 创建 </p>
     * @author  <p>当前负责人  </p>     
     *
     */
    @Component("rankTask")
    public class RankTask {
    
        @Resource
        ThreadPoolTaskExecutor threadPoolTaskExecutor;
        @Autowired
        RankSchedule schedule;
        
        public void startStatistics(String[] obj) {
            schedule.setObj(obj);
            Future future = threadPoolTaskExecutor.submit(schedule);
            // future.get();
        }
    }
    

      

    package com.ginkgocap.ywxt.knowledge.util;
    
    import java.util.concurrent.Callable;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    /**
     * 排行计划
     * <p>于2014-9-11 由  创建 </p>
     * @author  <p>当前负责人 </p>     
     */
    @Component
    public class RankSchedule implements Callable<String> {
    
        @Autowired
        private RankStatistic rs;
    
        private String[] obj;
    
        public String[] getObj() {
            return obj;
        }
    
        public void setObj(String[] obj) {
            this.obj = obj;
        }
    
        @Override
        public String call() throws Exception {
            rs.run(obj[0]);
            return null;
        }
    
    }
    

      

  • 相关阅读:
    Class的用途
    Flash网络编程安全沙箱问题隆重解决 (转)
    带参数的EventDispatcher
    Object的效率
    Oracle数据库语言修改成UTF8
    Python之字符串详解1
    初级/中级/高级运维,你是哪一级?
    这可能是php世界中最好的日志库——monolog
    vc程序大小优化最佳方案(转)http://blog.sina.com.cn/s/blog_4c50333c0100gjs3.html
    C# 调用lua 报错未能加载文件或程序集“lua51.dll”或它的某一个依赖项。找不到指定的模块。 解决方法
  • 原文地址:https://www.cnblogs.com/stit/p/4013244.html
Copyright © 2020-2023  润新知