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 * * ?