有关定时的多种方式

一:前言

    很久没有记载东西了,毕业回来之后一个多月都没怎么记载了,今天其实是很巧合的,本来很早以前写的一个定时器,在测试服务器上经常无缘无故的挂掉,进而使得整个服务器都挂掉了,上次弄的客户很不满意,老大就直接把我用quartz的定时器更改了,但是了我当时没怎么仔细看,然后今天我一个同学问我定时器怎么设置90分钟的,我说不行,然后我就想到我们的定时器改了,我就看了看代码,发现已经没有用我的quartz了,我就瞅了下代码。。。然后就。。。

二:定时的方式

     (1)、quartz的定时方式,在我自己的博客里面记载的有,这种方式是需要数据库的。

     (2)、spring task的方式,这个说白了就是交个spring来管理了,所以是不需要数据库的,配置的话差不多,都是大同小异。

     (3)、Timer,这种方式我没有用过,但是我查找了一下,发现是通过监听器和定时器定时来完成某个任务的(http://www.blogjava.net/fastunit/archive/2008/02/15/180116.html)

三:应用

   在使用(1)和(2)中有都有共同的区分

    A:org.springframework.scheduling.quartz.SimpleTriggerBean  这是代表每格指定的时间则触发一次。

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">  
<property name="jobDetail" ref="job1" />  
<property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->  
<property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 -->  
</bean>  

    B:org.springframework.scheduling.quartz.CronTriggerBean  这是代表每到指定时间触发一次,所以像是我们需要定时时间超过60分钟(比如想定时每90分钟执行一次的话就需要用A方式)

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
<property name="jobDetail" ref="job1" />  
<!—每天12:00运行一次 -->  
<property name="cronExpression" value="0 0 12 * * ?" />  
</bean>  

字段名(项)  必须  值范围  特殊字符 
秒 是 0-59  , - * /  
分 是 0-59  , - * /  
时 是 0-23  , - * /  
月的某天  是 1-31  , - * ? / L W  
月 是 1-12 or JAN-DEC  , - * /  
星期的某天 是 1-7 or SUN-SAT  , - * ? / L #  
年 否 empty, 1970-2099  , - * / 

这篇文章记载的非常详细,觉得讲得不错,相当不错,可以借鉴下http://blog.csdn.net/wilsonke/article/details/26590379。

刚刚朋友又发现一种方式http://my.oschina.net/xldc/blog/297864

  /**
     * 定时卡点计算。每天凌晨 02:00 执行一次
     */
    @Scheduled(cron = "0 0 2 * * *")
    public void autoCardCalculate() {
        System.out.println("定时卡点计算... " + new Date());
    }
 
    /**
     * 心跳更新。启动时执行一次,之后每隔1分钟执行一次
     */
    @Scheduled(fixedRate = 1000*60*1)
    public void heartbeat() {
        System.out.println("心跳更新... " + new Date());
    }
 
    /**
     * 卡点持久化。启动时执行一次,之后每隔2分钟执行一次
     */
    @Scheduled(fixedRate = 1000*60*2)
    public void persistRecord() {
        System.out.println("卡点持久化... " + new Date());
    }

四:总结

   最近转去做微信开发了,天天看了文档,微信文档最初看的挺迷迷糊糊的,分配的任务也是研究阿里云oss跨域上传文件下载文件,研究了好久好久,看文档都看了一个多星期,现在希望能把微信搞懂,多一个技能吧,咔咔咔咔咔咔咔。。。。

原文地址:https://www.cnblogs.com/wuhao1991/p/4671010.html