Spring对Quartz的支持

Notice:spring3.1.1好像还没有对quartz 2.x提供支持,这篇文章是针对quartz1.x的。

1.必须软件包(下面是Maven的依赖配置)

View Code
<dependency>

            <groupId>${spring.groupId}</groupId>

            <artifactId>spring-core</artifactId>

        </dependency>

        <dependency>

            <groupId>${spring.groupId}</groupId>

            <artifactId>spring-context</artifactId>

        </dependency>

        <dependency>

            <groupId>${spring.groupId}</groupId>

            <artifactId>spring-beans</artifactId>

        </dependency>

        <dependency>

            <groupId>org.opensymphony.quartz</groupId>

            <artifactId>quartz-all</artifactId>

            <version>1.6.1</version>

        </dependency>

        <dependency>

            <groupId>${spring.groupId}</groupId>

            <artifactId>spring-context-support</artifactId>

        </dependency>

        <dependency>

            <groupId>commons-collections</groupId>

            <artifactId>commons-collections</artifactId>

            <version>3.2.1</version>

        </dependency>

        <dependency>

            <groupId>${spring.groupId}</groupId>

            <artifactId>spring-tx</artifactId>

        </dependency>

 

2.对org.quartz.Job接口的支持

Spring提供了一个抽象类org.springframework.scheduling.quartz.QuartzJobBean来简化Job接口的实现。如下面的代码清单:

public class TenSecondJob extends QuartzJobBean {

    private static int times = 0;



    @Override

    protected void executeInternal(JobExecutionContext arg0)

            throws JobExecutionException {

        int seconds = (times++) * 10;

        System.out.println("10 seconds trigger:" + seconds + "秒已经过去了!");

    }



}

3.对org.quartz.JobDetail类的支持

Spring提供了两种方式对JobDetail的支持,

3.1提供了一个方便Bean——org.springframework.scheduling.quartz.JobDetailBean继承了JobDetail。下面是这个类的类声明:

public class JobDetailBean extends JobDetail

        implements BeanNameAware, ApplicationContextAware, InitializingBean {}

因此我们可以在上下文配置文件中使用JobDetailBean配置JobDetail:

<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">

        <property name="jobClass"

            value="com.sin90lzc.train.train_spring_quartz.TenSecondJob"></property>

    </bean>

 

3.2 提供了一个工厂Bean——org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean来生成JobDetail对象。

MethodInvokingJobDetailFactoryBean它会使用一个普通JavaBean的方法来实现Job的功能。这实际上就是生成了一个Job接口的代理对象。

我们先建立一个普通的JavaBean——JobBean:

public class JobBean {

    private int second = 0;



    public void printPerSecond() {

        System.out.println("second trigger:" + (second++) + "过去了!");

    }

}

printPerSecond方法提供了一个Job应该完成功能。那么下面就可以配置MethodInvokingJobDetailFactoryBean,由它来生成一个JobDetail对象

  <bean id="jobDetailCreateByFactaryBean"

        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

        <property name="targetObject">

            <bean class="com.sin90lzc.train.train_spring_quartz.JobBean" />

        </property>

        <property name="targetMethod" value="printPerSecond"></property>

        <property name="concurrent" value="true"></property>

    </bean>

 

4.Spring对org.quartz.Trigger接口的支持

4.1对org.quartz.SimpleTrigger的支持是提供了一个方便Bean——org.springframework.scheduling.quartz.SimpleTriggerBean。

<bean id="simpleTrigger"

        class="org.springframework.scheduling.quartz.SimpleTriggerBean">

        <property name="jobDetail" ref="jobDetail"></property>

        <property name="startDelay" value="0"></property>

        <property name="repeatInterval" value="10000"></property>

    </bean>

4.2对org.quartz.CronTrigger的支持是提供了一个方便Bean——org.springframework.scheduling.quartz.CronTriggerBean

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">

        <property name="jobDetail" ref="jobDetailCreateByFactaryBean"></property>

        <property name="cronExpression" value="* * * * * ? *"></property>

    </bean>

5.Spring对org.quartz.Scheduler接口的支持

Spring提供了一个工厂Bean来生成Scheduler对象,下面是该工厂Bean的声明:

public class SchedulerFactoryBean extends SchedulerAccessor implements FactoryBean<Scheduler>, BeanNameAware,

        ApplicationContextAware, InitializingBean, DisposableBean, SmartLifecycle {}

下面是该SchedulerFactoryBean的配置示例:

  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref bean="simpleTrigger" />

                <ref bean="cronTrigger" />

            </list>

        </property>

    </bean>

6.测试上面的代码与配置

public static void main(String[] args) throws Exception{

        ApplicationContext context = new ClassPathXmlApplicationContext(

                "applicationContext.xml");

        //TimeUnit.MINUTES.sleep(10);

    }

 

 

 

你可能感兴趣的:(spring)