spring 定时器对java 中的定时的任务做了很好的处理、要是在项目中用到了需要使用定时处理的操作,可以很方便的使用spring 来完成。以下是一个用timer 和Quartz 使用的例子。
timer:spring配置
<bean id="lzstoneTimeTask" class="com.timer.test.LzstoneTimeTask"/>
<bean id="taskInfo" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="delay" value="1000"></property>
<property name="period" value="4000"></property>
<property name="timerTask" ref="lzstoneTimeTask"></property>
</bean>
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<ref local="taskInfo"/>
</property>
</bean>
java:code
public class LzstoneTimeTask extends TimerTask {
@Override
public void run() {
System.out.println("进入当前方法!");
SimpleDateFormat fromat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date=fromat.format(new Date());
System.out.println("获得系统的时间是:"+date);
System.out.println("退出当前方法!");
}
}
Quartz:spring配置
<bean id="lzstoneQuartzTask" class="com.timer.test.LzstoneQuartzTask"/>
<bean id="schedulerJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="lzstoneQuartzTask"/>
<property name="targetMethod" value="execute"/>
<property name="concurrent" value="false"/>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean" >
<property name="jobDetail" ref="schedulerJobDetail"/>
<property name="cronExpression">
<value>0/10 * * * * ?</value>
</property>
</bean>
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTrigger"/>
</list>
</property>
</bean>
public class LzstoneQuartzTask{
public void execute(){
System.out.println("进入当前方法!");
SimpleDateFormat fromat=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String date=fromat.format(new Date());
System.out.println("获得系统的时间是:"+date);
System.out.println("退出当前方法!");
}
}
test:method。
public static void main(String[] args) {
//ApplicationContext ac = new FileSystemXmlApplicationContext("src/spring.xml");
System.out.println("start it now !");
ApplicationContext context = new ClassPathXmlApplicationContext("/spring0.xml");
System.out.println("end it now !");
}
动态cronExpression的配置介绍
<!--
一个cronExpression表达式有到少6个(也可能是7个)由空格分隔的时间元素.从左到右,这些元素的定义如下:
1.秒(0-59)
2.分钟(0-59)
3.小时(0-23)
4.月份中的是期(1-31)
5.月份(1-12或SUN-DEC)
6.星期中的日期(1-7或SUN-SAT)
7.年份(1970-2099)
例子:
0 0 10,14,16 * * ? 每天上午10点,下午2点和下午4点
0 0,15,30,45 * 1-10 * ? 每月前10天每隔15分钟
30 0 0 1 1 ? 2012 在2012年1月1日午夜过30秒时
0 0 8-5 ? * MON-FRI 每个工作日的工作时间
- 区间
* 通配符
? 你不想设置那个字段
-->
时间配置:
"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 * * ?