Spring 集成 Quartz 配置以及例子

来源:互联网 发布:50岁知天命 编辑:程序博客网 时间:2024/06/05 01:06

    最近本人要做一个相关的统计,而且要定时统计。定时统计这个东西做互联网的运用的比较多,在这里就分享一下本人一些小知识……

     最初开始啊 上网查都是使用到最原始的统计方法,后来一个同事就推荐使用quartz这个新玩意,个人感觉用起来相当的不错 ,在这里也推荐大家使用。

Quartz 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性。Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。
Spring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:
    1)为Quartz的重要组件类提供更具Bean风格的扩展类;
    2)提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。

 下面就演示一下相关的操作,首先是配置文件的配置:applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!-- 这里是工作类 -->
     <bean id="visitStatisticsJob"
        class="com.youboy.cshop.standalone.interfaces.support.jobs.VisitStatisticsJob" />
     <!-- 工作类的方法-->

    <bean id="visitStatisticsTask"
        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="visitStatisticsJob" />
        </property>
        <property name="targetMethod">
            <value>statistics</value>
        </property>
    </bean>

     <!--设计定时器-->
     <bean id="visitStatisticsTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="visitStatisticsTask" />
        </property>
        <property name="cronExpression">
            <value> 0 58 23 * * ? </value><!-- 0 */1 * ? * *  -->
        </property>
    </bean>

   <!--启动定时器 -->
     <bean id="startVisitStatisticsTask" lazy-init="false" autowire="no"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="visitStatisticsTime" />
            </list>
        </property>
    </bean>
</beans>

接下来是工作类 :VisitStatisticsJob

package com.youboy.cshop.standalone.interfaces.support.jobs;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;

import com.youboy.cshop.standalone.appliaction.home.VisitDetailsService;
import com.youboy.cshop.standalone.appliaction.home.VisitStatisticsService;
import com.youboy.cshop.standalone.domain.home.VisitStatistics;
import com.youboy.cshop.standalone.infrastructure.util.DateUtil;
import com.youboy.cshop.standalone.interfaces.support.VisitDetailsConditionParam;

public class VisitStatisticsJob {

    @Autowired
    private VisitDetailsService detailsService;
    @Autowired
    private VisitStatisticsService statisticsService;

    public void statistics() {
        VisitDetailsConditionParam conditionParam = new VisitDetailsConditionParam();
        conditionParam.setBeginTime(DateUtil.getThisDayBegin(new Date())
                .getTime());
        conditionParam.setEndTime(DateUtil.getThisDayEnd(new Date()).getTime());
        Integer num = detailsService.getCountByGroupBy(conditionParam);
        addVisitStatistics(conditionParam.getBeginTime(),num);

    }

    public void addVisitStatistics(long time,Integer num) {
        VisitStatistics visitStatistics = new VisitStatistics();
        visitStatistics.setVisitCount(num);
        visitStatistics.setVisitTime(time);
        statisticsService.addVisitStatistics(visitStatistics);
    }
}

就这点就可以定义好定时器了 ,你也可以放心使用了!最后是说的 是要一个jar包 quartz   jar包



原创粉丝点击