1、创建业务处理类
public class TaskTestAction { public void run() { System.out.println("测试定时器"); } }
2、在spring配置文件中配置定时器
<!-- 定时器业务类 --> <bean id="testTask" class="com.wkx.warning.controller.TaskTestAction"></bean> <!-- 定时器执行的业务类 --> <bean id="testDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="testTask" /> </property> <property name="targetMethod"> <value>run</value> </property> </bean> <!-- 配置触发器,每隔多久触发一次 --> <bean id="testTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref bean="testDetail" /> </property> <!-- 每隔多久执行一次,毫秒级 --> <property name="repeatInterval"> <value>5000</value> </property> </bean> <!-- 通用定时器工厂 --> <bean id="testScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="testTrigger" /> </list> </property> <property name="autoStartup" value="false"/> <property name="quartzProperties"> <props> <prop key="org.quartz.threadPool.threadCount">2</prop> </props> </property> </bean> <!-- MAP对象,存储定时器 --> <bean name="testMap" class="java.util.HashMap"> <constructor-arg> <map> <entry key="testScheduler" value-ref="testScheduler" /> </map> </constructor-arg> </bean>
3、在controller代码中获取map对象,并更改和启动定时器信息
// scheMap应该是从spring配置文件中获取的 Scheduler std = scheMap.get("testScheduler");
// 获取触发器 SimpleTrigger t = (SimpleTrigger)std.getTrigger("testTrigger", Scheduler.DEFAULT_GROUP);
// 修改触发器的间隔世界 t.setRepeatInterval(10000);
// 更新定时器 std.rescheduleJob("testTrigger", Scheduler.DEFAULT_GROUP, t); std.start();
注:以上的scheMap是从配置文件中获取的,可以通过spring注入的方式获取,例如
@Resource(name = "testMap") private Map<String, Scheduler> scheMap;
也可以自己读取spring配置文件获取
ApplicationContext ac = new FileSystemXmlApplicationContext("D:/apache-tomcat-7.0.25/webapps/ManageSystem/WEB-INF/conf/applicationContext.xml"); Map<String, StdScheduler> scheMap = (Map<String, StdScheduler>)ac.getBean("testMap");