1. 程式人生 > >spring結合quartz實現定時排程

spring結合quartz實現定時排程

quartz所需jar包

<!-- 定時任務quartz -->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</
groupId>
   <artifactId>quartz-jobs</artifactId>    <version>2.2.2</version> </dependency> <!--spring相關包-->        <dependency>            <groupId>org.springframework</groupId
>
           <artifactId>spring-web</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <dependency>            <
groupId>org.springframework</groupId>
           <artifactId>spring-webmvc</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- 新增Spring-core包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- 新增spring-context包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- 新增spring-tx包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- 新增spring-jdbc包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- 新增spring-test包 -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-test</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>4.2.5.RELEASE</version>        </dependency>        <!-- springmvc json -->        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>2.5.1</version>        </dependency>        <dependency>            <groupId>org.codehaus.jackson</groupId>            <artifactId>jackson-mapper-asl</artifactId>            <version>1.9.13</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>2.5.1</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-annotations</artifactId>            <version>2.5.1</version>        </dependency> <!-- 新增mybatis的核心包 --> <dependency>     <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.2.8</version>        </dependency>        <!-- 新增mybatis與Spring整合的核心包 -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.2.2</version>        </dependency>        <!-- 新增mysql驅動包 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.37</version>        </dependency>              

方式一:

​ 通過配置檔案【spring-quartz.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 定時器工作排程的bean -->
    <bean id="backupLogJob" class="com.suninfo.job.BackupLogJob" />
    <!-- job的配置開始 -->
    <bean id="myJobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="backupLogJob" />
        </property>
        <property name="targetMethod">
            <value>work</value>
        </property>
    </bean>
    <!-- 排程的配置 -->
    <bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref bean="myJobDetail" />
        </property>
        <property name="cronExpression">
            <value>0/10 * * * * ?</value>
        </property>
    </bean>
    <!-- 啟動觸發器的配置 -->
    <bean name="startQuertz" lazy-init="false" autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="crontestJobTrigger" />
            </list>
        </property>
    </bean>
</beans>

定時任務監聽類BackupLogJob:


package com.suninfo.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BackupLogJob implements Job {
    private static final Logger log = LoggerFactory.getLogger(BackupLogJob.class);
    @Override
    public void execute( JobExecutionContext context ) throws JobExecutionException {
        try {
            String backUpUuid = ( String )context.getMergedJobDataMap().get( "backupUuid" );
            log.debug( "接收到任務["+backUpUuid+"]" );
            JobContext.backupSettingService.backupLogforSchedule( backUpUuid );
        } catch( Exception e ) {
            e.printStackTrace();
        }
    }
}

方式二:

​ 使用自帶的機制通過JDBC實現定時,quartz.properties配置,啟動quartz時,會自動載入


org.quartz.scheduler.instanceName = MonitorScheduler
org.quartz.scheduler.instanceId = AUTO
#Quartz專案每次啟動後都會檢查官網Quartz是否存在新版本,屬性為true來跳過更新檢查。
org.quartz.scheduler.skipUpdateCheck=true

#連線池配置
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool    
org.quartz.threadPool.threadCount = 50      
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true  
#分散式配置
org.quartz.jobStore.isClustered=false
org.quartz.jobStore.clusterCheckinInterval=10000
org.quartz.