quartz定時器簡單使用


初次接觸quartz時,確實出現了很多問題,所以為了以后方便查找使用,就把它記錄下來

首先我使用的是quartz2.2.1.jar

<!--quartz定時器-->
    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.2.1</version>
    </dependency>

框架我用的是ssm,quartz整合ssm的配置

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="myJob" class="com.pskj.JXGSLZ.utils.QuartzTest" />

    <!-- job的配置開始 -->
    <bean id="myJobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">
            <ref bean="myJob" />
        </property>
        <property name="targetMethod">
            <value>start</value><!--要執行的方法-->
        </property>
        <!-- 上一次未執行完成的任務,要等待執行完再執行。 -->
        <property name="concurrent" value="false"></property>
    </bean>
    <!-- job的配置結束 -->


    <!-- 調度的配置開始 -->
    <bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail">
            <ref bean="myJobDetail" />
        </property>
        <property name="cronExpression">
            <!-- <value>* */5 * * * ?</value>    每天隔五分鍾執行一次  -->
            <value>0/1 * * * * ?</value>  <!--隔一秒執行一次-->
        </property>
    </bean>
    <!-- 調度的配置結束 -->

    <!-- 配置項目啟動后任務就執行一次 -->
    <bean id="rsh_simpleTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="myJobDetail" />
        <property name="startDelay" value="500" />
        <property name="repeatInterval" value="0" />
        <property name="repeatCount" value="0" />
    </bean>


    <!-- 啟動觸發器的配置開始 -->
    <bean id="myTimer" name="startQuertz" lazy-init="false" autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="rsh_simpleTrigger1" />
                <ref bean="crontestJobTrigger"/>
            </list>
        </property>
        <!-- <property name="waitForJobsToCompleteOnShutdown" value="true" /> -->
    </bean>
    <!-- 啟動觸發器的配置結束 -->



</beans>

quartz要執行的方法,TestService也是我寫的測試的service方法

QuartzTest 

package com.pskj.JXGSLZ.utils;

import com.pskj.JXGSLZ.service.test.TestService;

import javax.annotation.Resource;


public class QuartzTest {

    //測試表接口
    @Resource(name="TestService")
    private TestService testService;

    public void start(){
        System.out.println("執行定時任務");
  Map map=new HashMap()
; map.put("id","2"); try { //根據id查詢該條數據(測試數據) Map list= testService.findById(map); System.out.println(list); } catch (Exception e) { e.printStackTrace(); } } }

web.xml加載的文件(僅展示部分)

web.xml

<!-- 配置DispatcherServlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置springMVC需要加載的配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
    <!--這里已經加載了quartz的配置文件--> <param-value>classpath:spring/spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>

mybatis.xml也引入了quartz的數據源(僅展示部分)

spring-mybatis.xml

<!-- 引入配置文件 數據庫-->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value><!--jdbc數據源-->
                <value>classpath:quartz.properties</value><!--quartz數據源-->
            </list>
        </property>
    </bean>

因為quartz默認線程為10個,但我並不想要開這么多線程,所以想自己設置

quartz.properties

#線程池的名稱
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
#線程數量
org.quartz.threadPool.threadCount=1
#線程優先級
org.quartz.threadPool.threadPriority=5
#自創建父線程
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
#超時時間(單位毫秒)
org.quartz.jobStore.misfireThreshold=60000
#配置屬性調度器
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore

以上就是quartz的基本使用配置,接下來看看運行(只是截了部分)

 當然在配置的過程中可能發生一些問題,我遇到過配置quartz時job org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

報紅找不到,最后引進了一個jar包才好的

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.11.RELEASE</version>
    </dependency>

差不多就這樣了,如果我想不出更好的潤色點去寫這篇文章的話

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM