Spring整合quartz

  • 正常情况下,一个任务类必须实现Job接口,且覆盖execute方法,才能被调度所调用。

  • 在Spring中集成了Quartz框架,可以把任何一个bean的任意方法作为一个任务执行,而这个bean类无需实现任何接口,无需覆盖任何方法。

  • Spring可以把编程式调度变成声明式调度,只需要在xml文件中做一段配置。

Spring集成quartz框架例子1

 通过Spring配置做一个简单触发器

任务bean1:TestService.java

public class TestService {

 public void doSomething() {

  System.out.println("Do Something Freely!");

 }

 

 public void justDoIt() {

  System.out.println("Just Do It!");

 }

}

Spring核心配置文件:applicationContext.xml

 <!-- 普通的业务Bean -->
 <bean id="testService" class="com.gene.TestService" />
 <!-- 作业 -->
 <bean id="jobDetail_test"   
       class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="testService" />
  <property name="targetMethod" value="justDoIt" />
 </bean>
 <!-- 简单触发器 ,一般都是每隔多少毫秒执行一次-->
 <bean name="testTrigger"
  class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  <property name="jobDetail" ref="jobDetail_test" />
  <!-- 第一次启动延时(单位均为毫秒) -->
  <property name="startDelay" value="10" />
  <!-- 间隔时间 -->
  <property name="repeatInterval" value="2000" />
  <!-- 执行次数,默认没有限制 -->
  <property name="repeatCount" value="10" />
  <!-- 传递的参数 -->
  <property name="jobDataAsMap">
   <map>
    <entry key="count" value="10" />
   </map>
  </property>
 </bean>
 <!-- 计划调度-->
 <bean name="testScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref bean="testTrigger" />   
   </list>
  </property>
  <property name="schedulerContextAsMap">
   <map>
    <entry key="timeout" value="30" />
   </map>
  </property>
 </bean>

模拟spring容器初始化:TestQuartz.java

public class TestQuartz {

 public static void main(String[] args) {

  ApplicationContext context = new ClassPathXmlApplicationContext(

    "applicationContext.xml");

  System.out.println("Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。");

  System.out.println("Main方法执行结束了!");

 }

 }

Spring集成quartz框架示例2

  • 通过Spring配置做一个复杂触发器

  • 需要用到cron表达式

任务bean2:TestService2.java

public class TestService2 {

 public void doSomething() {

  System.out.println("Do Something Freely!");

 }

 

 public void justDoIt() {

  System.out.println("正在执行任务2!" + new Date());

 }

}

Spring核心配置文件:applicationContext.xml

<!-- 普通的业务Bean2 -->
 <bean id="testService2" class="com.gene.TestService2" />
 <!-- 作业2 -->
 <bean id="jobDetail_test2”  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="testService2" />
  <property name="targetMethod" value="justDoIt" />
 </bean>
<!-- 复杂触发器 -->
 <bean id="testTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail">
   <ref bean="jobDetail_test2" />
  </property>

  <!-- cron表达式,以下是在每分钟的10秒,15秒,20秒,45秒执行 -->
  <property name="cronExpression">
   <value>10,15,20,45 * * * * ?</value>
  </property>
 </bean>
 <!-- 计划 -->
 <bean name="testScheduler"
  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
   <list>
    <ref bean="testTrigger" />
    <ref bean="testTrigger2" />
   </list>
  </property>
  <property name="schedulerContextAsMap">
   <map>
    <entry key="timeout" value="30" />
   </map>
  </property>
 </bean>

模拟spring容器初始化:TestQuartz.java

public class TestQuartz {

 public static void main(String[] args) {

  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

  System.out.println("Main方法执行开始了! 定时器伴随着Spring的初始化执行了。。。");

  System.out.println("Main方法执行结束了!");

 }

 }

转载于:https://my.oschina.net/u/2301780/blog/364239

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值