java定时执行

来源:互联网 发布:eCryptFS centos 编辑:程序博客网 时间:2024/06/04 14:09

spring定时任务,scheduler方式
需要quartz-all-1.6.1.jar的支持
============================================================

类和方法,名称随意,在配置中指出即可

public class MySpringTimer{
 public void test(){
  System.out.println("代码执行,执行时间:"+new Date());
 }
}

===================

配置

<!-- bean配置 -->
<bean id="myTimer" class="com.bonc.tms.web.tms.local.ln.timerTest.MySpringTimer"></bean>

<!-- 方法配置 -->
    <bean name="quartzBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
     <property name="targetObject" ref="myTimer"/>
     <property name="targetMethod">
      <value>test</value>
     </property>
     <property name="concurrent">
      <value>false</value>
     </property>
    </bean>
   
    <!-- 执行时间配置 -->
    <bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="jobDetail" ref="quartzBean"/>
     <property name="cronExpression">
      <value>0/3 * * * * ?</value>
     </property>
    </bean>
   
    <!-- 监听配置 -->
    <bean id="sfd" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
     <property name="triggers">
      <list>
       <ref local="quartzTrigger"/>
      </list>
     </property>
    </bean>
   
   
    =================================================================================================
    时间表达式
   
    字段       允许值            允许的特殊字符  
 秒         0-59           , - * /  
 分         0-59           , - * /  
 小时       0-23           , - * /  
 日期       1-31           , - * ? / L W C  
 月份       1-12 或者 JAN-DEC       , - * /  
 星期       1-7 或者 SUN-SAT       , - * ? / L C #  
 年(可选)  留空, 1970-2099      , - * / 
 
 
 “*”字符被用来指定所有的值。如:”*“在分钟的字段域里表示“每分钟”。
 “?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
月份中的日期和星期中的日期这两个元素时互斥的一起应该通过设置一个问号(?)来表明不想设置那个字段
 “-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
 “,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
 L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天,
如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个
星期五

-----------------------------------------------------------------------------
表达式意义举例

"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触发