quartz2.2.1和spring4.1.4整合使用
2016-09-20 01:54
381 查看
项目结构
下面是本例子最后的项目工程结构下面,我们来跟着步骤搭建本项目吧。
往maven的pom文件中添加我们需要的jar
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.itaem.wen</groupId> <artifactId>squartz</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <properties> <springframework.version>4.1.4.RELEASE</springframework.version> <quartz.version>2.2.1</quartz.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${springframework.version}</version> </dependency> <!-- Transaction dependency is required with Quartz integration --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <!-- Quartz framework --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
使用定时调度任务框架配置任务
在spring集成quartz时候,有两种方法配置job使用MethodInvokingJobDetailFactoryBean来配置
这个方法是最简单的方法<!-- For times when you just need to invoke a method on a specific object --> <bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="myBean" /> <property name="targetMethod" value="printMessage" /> </bean>
使用JobDetailFactoryBean来配置
当你需要更灵活,更加高级的配置的时候,可以选择这种方法去配置<!-- For times when you need more complex processing, passing data to the scheduled job --> <bean name="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="net.itaem.wen.ScheduledJob" /> <property name="jobDataMap"> <map> <entry key="anotherBean" value-ref="anotherBean" /> </map> </property> <property name="durability" value="true" /> </bean>
下面是ScheduledJob代码
package net.itaem.wen; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * @author: Fighter168 */ public class ScheduledJob extends QuartzJobBean{ private AnotherBean anotherBean; @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { anotherBean.printAnotherMessage(); } public void setAnotherBean(AnotherBean anotherBean) { this.anotherBean = anotherBean; } }
配置Quartz中需要用到的Trigger
Trigger的配置也有两种类型简单的Trigger,使用SimpleTriggerFactoryBean创建
<!-- Run the job every 2 seconds with initial delay of 1 second --> <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <property name="jobDetail" ref="simpleJobDetail" /> <property name="startDelay" value="1000" /> <property name="repeatInterval" value="2000" /> </bean>
使用CronTriggerFactoryBean创建Cron Trigger
这个用起来比较灵活<!-- Run the job every 5 seconds only on Weekends --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="complexJobDetail" /> <property name="cronExpression" value="0/5 * * ? * SAT-SUN" /> </bean>
配置SchedulerFactoryBean
配置SchedulerFactoryBean也就是创建和配置QuartzScheduler<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="simpleJobDetail" /> <ref bean="complexJobDetail" /> </list> </property> <property name="triggers"> <list> <ref bean="simpleTrigger" /> <ref bean="cronTrigger" /> </list> </property> </bean>
下面是spring-scheduler.xml的完整配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="net.itaem.wen" />
<!-- For times when you just need to invoke a method on a specific object --> <bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="myBean" /> <property name="targetMethod" value="printMessage" /> </bean>
<!-- For times when you need more complex processing, passing data to the scheduled job -->
<bean name="complexJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="net.itaem.wen.ScheduledJob" />
<property name="jobDataMap">
<map>
<entry key="anotherBean" value-ref="anotherBean" />
</map>
</property>
<property name="durability" value="true" />
</bean>
<!-- Run the job every 2 seconds with initial delay of 1 second -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail" ref="simpleJobDetail" />
<property name="startDelay" value="1000" />
<property name="repeatInterval" value="2000" />
</bean>
<!-- Run the job every 5 seconds only on Weekends -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="complexJobDetail" />
<property name="cronExpression" value="0/5 * * ? * *" />
</bean>
<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="simpleJobDetail" /> <ref bean="complexJobDetail" /> </list> </property> <property name="triggers"> <list> <ref bean="simpleTrigger" /> <ref bean="cronTrigger" /> </list> </property> </bean>
</beans>
spring-mvc.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> <import resource="spring-scheduler.xml"/> </beans>
创建简单的POJO的任务
net.itaem.wen.MyBean
package net.itaem.wen; import org.springframework.stereotype.Component; /** * @author: Fighter168 */ @Component("myBean") public class MyBean { public void printMessage() { System.out.println("I am called by MethodInvokingJobDetailFactoryBean using SimpleTriggerFactoryBean"); } }
net.itaem.wen.ScheduledJob
package net.itaem.wen; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * @author: Fighter168 */ public class ScheduledJob extends QuartzJobBean{ private AnotherBean anotherBean; @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { anotherBean.printAnotherMessage(); } public void setAnotherBean(AnotherBean anotherBean) { this.anotherBean = anotherBean; } }
创建一个测试
import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author: Fighter168 */ public class AppMain { public static void main(String args[]){ AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring/spring-mvc.xml"); } }
下面是程序运行结果:
从上面可以看出,有两个定时任务执行了,一个是两秒执行一次,一个是五秒执行一次。
相关文章推荐
- quartz框架使用 && Spring整合quartz
- spring4.2.2+quartz2.2.1整合
- Spring整合Quartz(Spring:4.2.6.RELEASE+Quartz 2.2.1)
- quartz整合spring 相关配置及使用
- 使用Spring 整合 Quartz
- quartz使用(整合spring)
- spring4.1.2使用quartz2.2.1定时器
- Spring3.2.11与Quartz2.2.1整合时内存泄漏的问题的解决
- Quartz与Spring的整合使用
- Spring+Hibernate+Struts2整合Quartz, JOB中无法使用Spring注入
- spring4.2.4整合quartz2.2.1
- 使用spring整合Quartz实现―定时器功能
- Quartz任务调度器及与Spring的整合使用
- Quartz与Spring的整合使用——创建JobDetail的方式及Trigger
- quartz与spring的整合使用
- Spring和quartz整合的入门使用教程
- SpringBoot整合Quartz-动态读取任务执行(2.2.1)
- quartz单独使用,不整合spring实例
- Quartz任务调度框架和Spring的整合使用
- 使用Spring整合Quartz轻松完成定时任务