在spring中你有时候需要在每天或者指定的一个时候进行一系列的操作。这个时候我们的spring为我们提供了一个很好的包来解决这个问题,你这是需要写一个Class文件,在文件中定义你要执行操作的函数你就可以通过配置来达到定时操作了。
1)需要的jar包为:quartz.jar包,将他加到你工程的classpath中去。
2)在applicationContext中配置你的定时发送操作。
(1)下边定义的这个testQuarz就是我们要将我们的定时操作函数TestDoIt()所要放置的地方。就是说TestDoIt()这个方法是TestQuarz这个类中的一个函数。这里声明一下这个bean。就是将这个bean注入到我们的容器中。这个时候我们可以在这个bean中引用容器中其他的bean进行数据库操作。是不是很酷?
(2)下边的这个bean是我们定义要使用哪个bean中的哪个方法作为我们要定时执行的任务。这里定义了我们要使用testQuarz这个bean中的TestDoIt()这个函数作为我们要定时执行的任务。
(3)这是一个触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个。这里我们定义了要触发的jobDetail是quartzDetail,并且我们还定义了触发的时间。
<!-- 每天凌晨1点7分18妙运行定时任务,时间的设置请看下边
更多的配置例子请查看:http://wiki.opensymphony.com/display/QRTZ1/CronTriggers+Tutorial
-->
<!-- 一定要把autowire设置为no,否则它能感知出dataSourse并设置里面的dataSourse的属性-->
(4)下边的是我们管理这些触发器的总设置,他管理我们我们的触发器列表。据说他的内部是自己建立了自己的数据库来存放自己的临时表,因为我们在我们的配置文件中自动的配置了dataSource这个bean,我们的每一个bean都会在使用数据库的时候找到他,但是如果我们下边的这个管理bean知道的话就会把他当成自己的临时数据库,然后就会出错。所以我们需要将下边的数据库感知设置成否定。这样就不影响他内部实现了。我们可以在下边的bean的list中放置多个触发器。
到此,我们的定时发送设置就完成了,具体的还要看看spring的refence比较好,那些比较细的细节东东我没有涉及到。
1)需要的jar包为:quartz.jar包,将他加到你工程的classpath中去。
2)在applicationContext中配置你的定时发送操作。
(1)下边定义的这个testQuarz就是我们要将我们的定时操作函数TestDoIt()所要放置的地方。就是说TestDoIt()这个方法是TestQuarz这个类中的一个函数。这里声明一下这个bean。就是将这个bean注入到我们的容器中。这个时候我们可以在这个bean中引用容器中其他的bean进行数据库操作。是不是很酷?
代码: |
<bean id="testQuarz" class="cn.demo.test.util.TestQuarz"/> |
代码: |
<bean id="quartzDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="testQuarz"/> </property> <property name="targetMethod"> <value>TestDoIt</value> </property> </bean> |
代码: |
<bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="quartzDetail"/> </property> <property name="cronExpression"> |
<!-- 每天凌晨1点7分18妙运行定时任务,时间的设置请看下边
更多的配置例子请查看:http://wiki.opensymphony.com/display/QRTZ1/CronTriggers+Tutorial
-->
代码: |
<value>18 7 1 * * ?</value> </property> </bean> |
<!-- 一定要把autowire设置为no,否则它能感知出dataSourse并设置里面的dataSourse的属性-->
(4)下边的是我们管理这些触发器的总设置,他管理我们我们的触发器列表。据说他的内部是自己建立了自己的数据库来存放自己的临时表,因为我们在我们的配置文件中自动的配置了dataSource这个bean,我们的每一个bean都会在使用数据库的时候找到他,但是如果我们下边的这个管理bean知道的话就会把他当成自己的临时数据库,然后就会出错。所以我们需要将下边的数据库感知设置成否定。这样就不影响他内部实现了。我们可以在下边的bean的list中放置多个触发器。
代码: |
<bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="quartzTrigger"/> </list> </property> </bean> |
到此,我们的定时发送设置就完成了,具体的还要看看spring的refence比较好,那些比较细的细节东东我没有涉及到。