最近本人要做一个相关的统计,而且要定时统计。定时统计这个东西做互联网的运用的比较多,在这里就分享一下本人一些小知识……
最初开始啊 上网查都是使用到最原始的统计方法,后来一个同事就推荐使用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包