zoukankan      html  css  js  c++  java
  • 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>

    差不多就这样了,如果我想不出更好的润色点去写这篇文章的话

    
    
  • 相关阅读:
    android loginDemo +WebService用户登录验证
    Integrating Google Sign-In into Your Android App
    Android 应用程序集成Google 登录及二次封装
    facebook 分享
    Android Facebook和Twitter登录和分享完整版
    Android 友盟社会化组件-分享实现
    Android集成友盟社会化分享功能
    c 判断是否为 字母或数字(iswalnum example)
    c 判断字符是否为字母 (iswalpha example)
    下载安装Xocde并创建一个C语言的项目工程
  • 原文地址:https://www.cnblogs.com/magepi/p/9596943.html
Copyright © 2011-2022 走看看