1、在spring配置文件中配置好定时器
<bean id="reportJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="reprotService"/>
<property name="targetMethod" value="synReportData"/>
<property name="concurrent" value="false"/>
</bean>
<bean id="reportTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reportJob"/>
<property name="cronExpression" value="0 0 3 * * ?"/>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="reportTrigger"/>
</list>
</property>
</bean>
2、需要的jar包,还是去收集一下吧。妈的spring的jar包名称搞乱我了,我公司的项目有这些jar包。但自己创建的ssh项目(非公司jar包)却没有,在网上查了下需要的jar包quartz-all-1.6.0.jar、jta.jar。却还是不行。公司的jar包与自己项目的jar包名称不一样,如果拷贝到自己的项目肯定会出现重复的情况。哎,麻烦死了。就不总结了。
3、该定时器的作用:每天3点执行一次日报表统计任务。任务详情如下:
需要定时器的原因:
1,底层数据量庞大、且底层数据量只能存下一个月的信息。如果查询一个月前的报表统计,将没有数据。
2,通过底层数据得出报表统计的结果数据计算量庞大。如果每次查询报表统计都通过这段计算会照常等待时间过长。
3,执行时间:该报表统计是日报表统计,所以是每天执行一次就可以。
定时器指定的方法的主要操作(这是重点哦,有精华):
1、在一个中间表DATA_ADAPTER_VAR中查询日统计报表更新到了哪一天。为什么这样呢?这是为了解决项目更新的情况,或由于其他原因服务器停掉了。那这 段时间不会更新。
2、将上次统计报表更新到的日期与此时相比较,更新中间那些天里的日报表统计数据到数据库中。更新中间表DATA_ADAPTER_VAR的时间为昨天(因为此时日报表统计就是更新到昨天,今天的数据得到第二天才能统计啊)。
中间表DATA_ADAPTER_VAR结构
createtable DATA_ADAPTER_VAR
(
key VARCHAR2(20),--例如:REPORT
time VARCHAR2(50), --例如:2015-03-12
descriptionVARCHAR2(60)--例如:
)
insert into DATA_ADAPTER_VAR (key, time,description) values ('REPORT', '', '日报表统计');
4、关于时间设定: 时间大小由小到大排列,从秒开始,顺序为 秒,分,时,天,月,年 *为任意 ?为无限制。
<property name="cronExpression" value="0 0 3 * * ?"/>。这个是将定时器设置在每天3点执行一次。
具体时间设定可参考
"0/10 * * * * ?" 每10秒触发
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?