您的位置:首页 > 编程语言 > Java开发

Spring整合quartz

2015-01-06 14:08 260 查看
正常情况下,一个任务类必须实现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方法执行结束了!");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: