1.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" xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    
        <property name="quartzProperties">
            <props>
                <prop key="org.quartz.scheduler.instanceName">CRMscheduler</prop>
                <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
                <!-- 线程池配置 -->
                <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
                <prop key="org.quartz.threadPool.threadCount">3</prop>
                <prop key="org.quartz.threadPool.threadPriority">5</prop>
                <!-- JobStore 配置 -->
                <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
                <!-- 集群配置 -->
                <prop key="org.quartz.jobStore.isClustered">true</prop>
                <prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>
                <prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>
                <!-- 数据源配置 使用DBCP连接池 数据源与dataSource一致 -->
                <prop key="org.quartz.jobStore.dataSource">myDS</prop>
                <prop key="org.quartz.dataSource.myDS.driver">${db.driverClassName}</prop>
                <prop key="org.quartz.dataSource.myDS.URL">${db.quartz_park.url}</prop>
                <prop key="org.quartz.dataSource.myDS.user">${db.username}</prop>
                <prop key="org.quartz.dataSource.myDS.password">${db.password}</prop>
                <prop key="org.quartz.dataSource.myDS.maxConnections">10</prop>
                <prop key="org.quartz.jobStore.misfireThreshold">120000</prop>
            </props>
        </property>

<property name="schedulerName" value="CRMscheduler" />
        <property name="startupDelay" value="30" />
        <!-- 自动启动 -->
        <property name="autoStartup">
            <value>true</value>
        </property>
        <property name="overwriteExistingJobs">
            <value>true</value>
        </property>
        
        
        <property name="triggers">
            <list>
                <ref local="parkCouponsIssueTrigger"/><!-- 更新优惠券管理的购买表的失效时间字段 -->        
                <ref local="parkCardOverTimeTrigger"/><!-- 更新超时的卡的信息-->        
                <ref local="createOverTimeTicketTrigger"/><!-- 创建超时券-->    
                <ref local="parkCouponsIssueBackupsTrigger"/><!-- 备份优惠券管理的购买表的半年数据-->        
            </list>
        </property>
        <property name="applicationContextSchedulerContextKey" value="applicationContext" />
    </bean>    
    
    <!--定时同步parkCouponsIssue表的数据 start yxz -->
    <bean id="parkCouponsIssueTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="parkCouponsIssueJobDetail"/>
        </property>
        <property name="cronExpression">
            <value>0 * * * * ?</value>
        </property>
    </bean>

<bean id="parkCouponsIssueJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="parkCouponsIssueService" />
                <entry key="targetMethod" value="updateInvalidTimeData" />
            </map>
        </property>
        <property name="concurrent" value="false" />
    </bean>
    <!--定时同步communitySynchData表的数据 end -->
    
    <!--定时备份TicketDetails(核销记录)表的数据 start 2017/11/06 yxz-->
    <bean id="parkCouponsIssueBackupsTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="parkCouponsIssueBackupsJobDetail"/>
        </property>
        <property name="cronExpression">
            <value>0 0/1 * * * ?</value>
        </property>
    </bean>

<bean id="parkCouponsIssueBackupsJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="ticketDetailsBackupsService" />
                <entry key="targetMethod" value="updateInvalidTimeData" />
            </map>
        </property>
        <property name="concurrent" value="false" />
    </bean>
    
    <!--定时同步communitySynchData表的数据 end 2017/11/06 yxz-->
    
    
    <!--定时同步parkCouponsIssue表的数据 start -->
    <bean id="parkCardOverTimeTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="parkCardOverTimeJobDetail"/>
        </property>
        <property name="cronExpression">
            <value>0 * * * * ?</value>
        </property>
    </bean>

<bean id="parkCardOverTimeJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="parkMonthCardInfoAction" />
                <entry key="targetMethod" value="updateOverTimeCard" />
            </map>
        </property>
        <property name="concurrent" value="false" />
    </bean>
    
    <!--定时同步parkCouponsIssue表的数据 start -->
    <bean id="createOverTimeTicketTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail">
            <ref bean="createOverTimeTicketJobDetail"/>
        </property>
        <property name="cronExpression">
            <value>0 * * * * ?</value>
        </property>
    </bean>

<bean id="createOverTimeTicketJobDetail" class="com.ivchat.common.bean.quartz.CommJobDetailBean">
        <property name="jobDataAsMap">
            <map>
                <entry key="targetObject" value="parkDetailsAction" />
                <entry key="targetMethod" value="createOverTimeTicket" />
            </map>
        </property>
        <property name="concurrent" value="false" />
    </bean>
    
    <!--定时同步communitySynchData表的数据 end -->
</beans>

2.作业类1

package com.ivchat.common.bean.quartz;

import org.springframework.scheduling.quartz.JobDetailBean;

/**
 * JOB明细对象
 * @author 居里智能
 *
 */
public class CommJobDetailBean extends JobDetailBean {
    private boolean concurrent = false;

@Override
    public void afterPropertiesSet() {
        try{
            if (concurrent){
                this.setJobClass(CommDetailQuartzJobBean.class);
            }else{
                this.setJobClass(StatefulMethodInvokingJob.class);
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        // TODO Auto-generated method stub
        super.afterPropertiesSet();
    }

public boolean isConcurrent() {
        return concurrent;
    }

public void setConcurrent(boolean concurrent) {
        this.concurrent = concurrent;
    }
    
    public boolean getConcurrent() {
        return concurrent;
    }
}
3.作业类2

package com.ivchat.common.bean.quartz;

import java.lang.reflect.Method;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.ivchat.common.util.SpringUtil;

/**
 * JOB类,到时间即时执行,有可能多个JOB并发执行
 * @author 居里智能
 *
 */
public class CommDetailQuartzJobBean extends QuartzJobBean implements ApplicationContextAware{

private String targetObject;
    private String targetMethod;
    private ApplicationContext applicationContext;
    @Override
    public void executeInternal(JobExecutionContext context)
            throws JobExecutionException {
        Object otargetObject = null;
        Method m = null;
        
        try {
            otargetObject = applicationContext.getBean(targetObject);
            
            m = otargetObject.getClass().getMethod(targetMethod,
                    new Class[] {});
            m.invoke(otargetObject, new Object[] {});
        } catch (Exception e) {
            throw new JobExecutionException(e);
        }
    }

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

public ApplicationContext getApplicationContext() {
        return applicationContext;
    }

public String getTargetObject() {
        return targetObject;
    }

public void setTargetObject(String targetObject) {
        this.targetObject = targetObject;
    }

public String getTargetMethod() {
        return targetMethod;
    }

public void setTargetMethod(String targetMethod) {
        this.targetMethod = targetMethod;
    }

}

java Quartz定时器任务与Spring 的实现的更多相关文章

  1. java Quartz定时器任务与Spring task定时的几种实现,

    java Quartz定时器任务与Spring task定时的几种实现 基于java 的定时任务实现, Quartz 时间详细配置    请查阅   http://www.cnblogs.com/si ...

  2. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  3. Quartz定时器+Spring + @Autowired注入 空指针异常

    在Quartz的定时方法里引用@Autowired注入Bean,会报空指针错误 解决办法: 第一种方法:(推荐,简单,亲测可行) 使用@Resource(name="指定要注入的Bean&q ...

  4. Spring的quartz定时器重复执行二次的问题解决

    Spring的quartz定时器同一时刻重复执行二次的问题解决 最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的ha ...

  5. 基于spring和Quartz定时器

    最近做一个小项目,要每7天去调用webservice获取一次数据.所以就用定时器来完成spring是4.1.6,quartz是2.2.1. 首先配置spring的xml文件.首先定义你要被执行的类 & ...

  6. Spring的quartz定时器同一时刻重复执行二次的问题解决

    最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...

  7. spring启动quartz定时器

    在很多中经常要用到定时任务,quartz是定时器中比较好用的,在Spring中使用quartz是很容易的事情,首先在spring的applicationContext.xml文件中增加如下配置: &l ...

  8. 实现quartz定时器及quartz定时器原理介绍(转)

    一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...

  9. java之定时器任务Timer用法

    在项目开发中,经常会遇到需要实现一些定时操作的任务,写过很多遍了,然而每次写的时候,总是会对一些细节有所遗忘,后来想想可能是没有总结的缘故,所以今天小编就打算总结一下可能会被遗忘的小点: 1. pub ...

随机推荐

  1. yml 后面的配置覆盖前面的

    事情是这样的: a: b: c: tomcat d: hoho # 中间还隔了好多 a: b: c: tomcat 这种情况下,后面的配置会覆盖前面的所有配置,即 a.d = hoho 也会被覆盖 y ...

  2. dockerd启动配置_修改IP和systemd管理

    docker采用CS架构,dockerd是管理后台进程,默认的配置文件为/etc/docker/daemon.json(--config-file可以指定非默认位置). 一个完整的daemon.jso ...

  3. 全局Threshold和动态阈值分割Dyn_Threshold的应用场景

    手册里面的particle例子,例子的任务是分析颗粒在液体中.在这个应用程序的主要困难:存在两种类型的对象:大明亮物体和较低的小物体的对比.此外噪音使分割的存在困难:无法使用全局灰度阈值thresho ...

  4. linux和windows强制用户第一次登陆修改密码

    linux: passwd -e root windows: 计算机右键->管理->本地用户和组->用户->administrator->下一次登陆修改密码 如果密码复杂 ...

  5. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  6. 自己动手在win2003系统中添加虚拟网卡

    运用虚拟网卡我们可以更好地使用我们的网络,那么在win2003中该怎么操作呢?下面就为大家介绍下具体的步骤   虚拟网卡是用软件来实现虚拟的网卡,通过运用虚拟网卡我们可以更好地使用我们的网络.但是虚拟 ...

  7. 使用PgBouncer连接池

    1.pgbouncer 的介绍 pgbouncer是一个针对PostgreSQL数据库的轻量级连接池,任何目标应用都可以把 pgbouncer 当作一个 PostgreSQL/Greenplum 服务 ...

  8. Spring data Jpa 分页从1开始,查询方法兼容 Mybatis,分页参数兼容Jqgrid

    废话少说 有参数可以设置 在org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties 中 /** * Whethe ...

  9. One example to understand SemFix: Program Repair via Semantic Analysis

    One example to understand SemFix: Program Repair via Semantic Analysis Basic Information Authors: Ho ...

  10. C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

    简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NE ...