Spring 定时器的简单实现
最近作业中需要实现以下功能:
1. 图书到期前提醒;
2. 图书如果过期每天需要扣N元钱。
3. 如果过期超过M天则锁定改账户。
这3个需求其实都是定时任务,项目架构是SSH,Spring框架支持Java 的Timer类,用来实现上述功能非常简单。
首先实现我们继承java.util.TimerTask类实现run方法
public class CheckExpiredTask extends TimerTask { private BorrowDao borrowDao; public BorrowDao getBorrowDao() { return borrowDao; } public void setBorrowDao(BorrowDao borrowDao) { this.borrowDao = borrowDao; } @Override public void run() { System.out.println("开始检测图书列表....."); List<borrow> bl = borrowDao.getBorrowList(); for (Borrow borrow : bl) { System.out.println(borrow.getBookId()); //...检测每一本书是否有过期 } } }
接下来配置Spring定时器
<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property value="5000" name="delay"></property> <property value="100000" name="period"></property> <property name="timerTask" ref="checkExpiredTask"></property> </bean>
这里delay是指多久后(毫秒)开始执行这个timerTask,value指每隔多久run一次,timerTask指向我们刚才写的任务类。
配置TimerFactoryBean
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <ref bean="scheduledTask"></ref> </list> </property> </bean>
TimerFactoryBean允许我们指定一个或多个ScheduledTimerTasks,java.util.Timer的实例就是由它创建和管理的。
定义任务bean
<bean id="checkExpiredTask" class="com.bjtu.lms.util.CheckExpiredTask"> <property name="borrowDao"> <ref local="borrowDao" /> </property> </bean>
和定义一般bean一样,你可以在这里使用AOP和注入其他类。
很简单就实现了循环任务,不过Timer不支持定时启动任务,如果有更复杂的需求,可以使用Quartz Scheduler,我暂时用不到,就不研究了。。。