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");