quartz定时器简单使用

使用的是quartz2.2.1.jar

pom.xml文件导入依赖包

<!--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>

以上是转载自 马革皮

以下是我的想法:
QuartzTest 文件可以写在serviceImpl文件下

package com.pskj.JXGSLZ.serviceImpl;

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

import javax.annotation.Resource;

//这里用注解定义
@Service("QuartzTest")
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();
        }

    }
} 
<?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">

    <!-- 因为我上面已经用注解定义了QuartzTest,这步就可以省略 -->
    <!-- 工作的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="QuartzTest" /> <!-- 这里就可以直接注入了 -->
        </property>
        <property name="targetMethod">
            <value>start</value><!--要执行的方法-->
        </property>
        <!-- 上一次未执行完成的任务,要等待执行完再执行。 -->
        <property name="concurrent" value="false"></property>
    </bean>
    <!-- job的配置结束 -->
    
    以下配置不变
    ...........
</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值