第一步: 创建web工程项目,加载包 quartz.jar 和spring相关包
第二步 :src包中编写一个执行类
public class QuartzServiceImp implements IQuartzService { public void hskrun() { // TODO Auto-generated method stub System.out.println("run hskrun"); } }
第三步:配置applicationContext.xml
a.加载执行bean
<!-- 加载bean -->
<bean id="hskrun" class="com.quartz.QuartzServiceImp" />
b.下边的这个bean是我们定义要使用哪个bean中的哪个方法作为我们要定时执行的任务。这里定义了我们要使用hskrun这个bean中的hskrun()这个函数作为我们要定时执行的任务。
<!--将执行bean注入spring job容器类--> <bean id="quartzDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="hskrun"/> </property> <property name="targetMethod"> <value>hskrun</value> </property> </bean>
c.这是一个触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是quartzDetail,并且我们还定义了触发的时间。
<!--触发器bean的设置,--> <bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="quartzDetail"/> </property> <property name="cronExpression"> <!-- 时间的设置请看下边另外一篇文章--> <value>2-59 * * * * ?</value> </property> </bean>
d下边的是我们管理这些触发器的总设置,他管理我们我们的触发器列表。据说他的内部是自己建立了自己的数据库来存放自己的临时表,因为我们在我们的配置文件中自动的配置了dataSource这个bean,我们的每一个bean都会在使用数据库的时候找到他,但是如果我们下边的这个管理bean知道的话就会把他当成自己的临时数据库,然后就会出错。所以我们需要将下边的数据库感知设置成否定。这样就不影响他内部实现了。我们可以在下边的bean的list中放置多个触发器。
<!-- 一定要把autowire设置为no,否则它能感知出dataSourse并设置里面的dataSourse的属性--> <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="quartzTrigger"/> </list> </property> </bean>
第三步启动spring
编写启动class
public class Testrun { public static void main(String[] args) { ApplicationContext springContext = new ClassPathXmlApplicationContext( new String[] { "classpath:applicationContext.xml" }); } }
第四步运行 Testrun
显示结果如下
run hskrun run hskrun run hskrun run hskrun run hskrun run hskrun run hskrun