Spring 石英調度

1、繼承式Quartz定時器

1.建立一個繼承自QuartzJobBean的類,並重寫executeInternal方法
public class MyJob extends QuartzJobBean{
 
   private int timeout;
    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        System.out.println("如今時間爲: " + (new Date()));
    }
    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }
}

2.建立調度器JobDetailBean
<bean id="jobDetail"
    class="org.springframework.scheduling.quartz.JobDetailBean">
    <!--指定調度器的jobClass屬性的值爲QuartzJobBean的子類-->
    <property name="jobClass">
        <value>com.my.pojo.MyJob</value>
    </property>
    <!--設置開啓時間-->
    <property name="jobDataAsMap">
        <map>
            <entry key="timeout" value="0"></entry>
        </map>
    </property>
</bean>

3.建立調度觸發器CronTriggerBean
<bean id="trigger"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <!--將調度器賦值給觸發器的jobDetail屬性-->
    <property name="jobDetail" ref="jobDetail"></property>
    <!--設置定時時間-->
    <property name="cronExpression">
        <value>0-59 * * * * ?</value>
    </property>
</bean>

4.建立觸發器調度工廠SchedulerFactoryBean
<bean
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref local="trigger"/>
        </list>
    </property>
</bean>

####測試類
public static void main(String[] args) throws SchedulerException {
    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:container.xml");
    JobDetail job = (JobDetail) ac.getBean("jobDetail");
    CronTriggerBean trigger = (CronTriggerBean) ac.getBean("trigger");
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    scheduler.scheduleJob(job, trigger);
    scheduler.start();
}



2、非繼承式Quartz定時器

1.聲明做業類MyJob
<bean id="job" class="com.my.pojo.MyJob"></bean>
public class MyJob {
    public void doJob(){
        System.out.println("如今時間爲: " + (new Date()));
    }
}
此類能夠是任意類型的類

2.配置做業類MethodInvokingJobDetailFactoryBean
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!--將以前聲明的要運行的類賦值給此類的targetObject屬性-->
    <property name="targetObject" ref="job"></property>
    <!--指定目標類中被管理的方法,對應屬性名爲targetMethod-->
    <property name="targetMethod" value="doJob"></property>
</bean>

3.配置觸發器CronTriggerBean
<bean id="trigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
    <!--將做業類管理器交與觸發器管理-->
    <property name="jobDetail" ref="jobDetail"></property>
    <!--設置觸發器運行的時間-->
    <property name="cronExpression">
        <value>1-50 * * * * ?</value>
    </property>
</bean>

4.配置調度工廠SchedulerFactoryBean
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <!--將觸發器交與調度工廠管理-->
    <property name="triggers">
        <list>
            <ref local="trigger"/>
        </list>
    </property>
</bean>

####測試類
public static void main(String[] args) throws SchedulerException {
    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:container.xml");
    JobDetail job = (JobDetail) ac.getBean("jobDetail");
    CronTriggerBean trigger = (CronTriggerBean) ac.getBean("trigger");
    Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
    scheduler.start();
}

spring

相關文章
相關標籤/搜索