ssh中使用spring的集成quartz 开发定时任务

之前没有使用框架开发时对于开发定时任务都是 使用java的原声timer类,重写线程的run方法跑要执行的任务。刚刚换的新公司,项目使用ssh2,目前该项目中的定时任务的使用spirng集成的quartz工具,非常方便。好了,废话不多说,说一下开发过程。

首先,需要建一个资源配置xml文件,一般以quartz结尾。如我项目中的该文件名为:applicationContext-bms-sendxml-quartz.xml,别忘了在applicationContext.xml文件中导入该文件。applicationContext-bms-sendxml-quartz.xml文件配置如下

1.配置调度工厂,这个bean是生成spring集成quartz的工具类org.springframework.scheduling.quartz.SchedulerFactoryBean的对象,用于管理调度对象。

    <!-- 配置调度工厂 -->
    <bean id="startQuertz"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="ContentInjectResponseTrigger" />
            </list>
        </property>
    </bean>

2.配置调度任务。这个调度任务有两个不同的实现类,分别是org.springframework.scheduling.quartz.SimpleTriggerBean和org.springframework.scheduling.quartz.CronTriggerBean,区别为:
 SimpleTrigger:当需要在规定的时间执行一次或在规定的时间段以一定的时间间隔重复触发执行Job时,

CronTriggerBean:  CronTrigger  支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔。具体配置如下

采用org.springframework.scheduling.quartz.SimpleTriggerBean:

<bean id="CheckAssetStatusTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="jobAssetStatusCheck" />
        <property name="startDelay" value="60000" />
        <!-- 调度工厂实例化后,经过0秒开始执行调度 -->
        <property name="repeatInterval" value="600000" />
        <!-- 每5分钟调度一次 -->
    </bean>

采用org.springframework.scheduling.quartz.CronTriggerBean:

<bean id="ContentInjectResponseTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
     <property name="cronExpression">
          <value>${QueryContentResponseCronExpression}</value>
     </property>
     <property name="jobDetail" ref="autoQueryContentResponseJob"/>
     </bean>

如上代码中的cronExpression参数就是配置任务时间参数,具体见我关于两个触发器的其他博文

3.配置具体的调度事项,即上面代码的autoQueryContentResponseJob类

<bean id="autoQueryContentResponseJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject">
    <bean class="com.avit.mmsp.common.message.CallBackInjectResultJob"/>
    </property>
    <property name="targetMethod" value="execute"/>
    <property name="concurrent" value="false"/>
    </bean>

targetObject为目标类,targetMethod即为任务执行方法。concurrent参数表示是否并发调度,false表示不并发。好了,看看这个任务实现类和实现方法:

package com.avit.mmsp.common.message;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.avit.mmsp.common.datasource.CustomerContextHolder;
import com.avit.mmsp.common.message.service.ContentInjectResponseService;

public class CallBackInjectResultJob {

    private static Logger log = LoggerFactory.getLogger(SendMessageJob.class);
    @Inject
    private  ContentInjectResponseService contentInjectResponseService;

    public void execute() {
        CustomerContextHolder.setCustomerType(CustomerContextHolder.CMS_DATA_SOURCE);
        try {
            log.info("查询内容注入结果开始");
            contentInjectResponseService.injectResponse();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

具体的实现就不贴出来了。over,如有异议可留言交流

时间: 2024-10-08 20:04:20

ssh中使用spring的集成quartz 开发定时任务的相关文章

Spring Boot集成quartz实现定时任务并支持切换任务数据源

org.quartz实现定时任务并自定义切换任务数据源 在工作中经常会需要使用到定时任务处理各种周期性的任务,org.quartz是处理此类定时任务的一个优秀框架.随着项目一点点推进,此时我们并不满足于任务仅仅是定时执行,我们还想要对任务进行更多的控制,随时能对任务进行人为干预,就需要对quartz有更深入的了解.而随着微服务的流行,项目中多数据源的情况也越来越常见,在定时任务中集成多数据源切换的功能也需要集成进来. 集成quartz实现定时任务 集成quartz实现定时任务 quartz中实现

【转】SSH中 整合spring和proxool 连接池

[摘要:比来做的一个项目中应用到了毗邻池技巧,大概我们人人比拟认识的开源毗邻池有dbcp,c3p0,proxool.对那三种毗邻池来讲,从机能战失足率来讲,proxool轻微比前两种好些.本日我首要简略] 最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的开源连接池有dbcp,c3p0,proxool.对这三种连接池来说,从性能和出错率来说,proxool稍微比前两种好些.今天我主要简单的讲述一下proxool,我在项目中成功的配置和源码. 第一步:首先去http://proxool.

Spring Boot集成Quartz注入Spring管理的类

摘要: 在Spring Boot中使用Quartz时,在JOB中一般需要引用Spring管理的Bean,通过定义Job Factory实现自动注入. Spring有自己的Schedule定时任务,在Spring boot中使用的时候,不能动态管理JOB,于是就使用Quartz来实现. 在Spring Boot中配置Quartz: import java.io.IOException; import java.util.Properties; import org.springframework.

【spring-boot】 springboot集成quartz实现定时任务

在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. 2.使用spring的定时器: spring自带支持定时器的任务实现.其可通过简单配置来使用到简单的定时任务. @Component @Configurable @EnableScheduling p

spring集成quartz实现定时任务

定时器jar引入 <dependency>    <groupId>org.quartz-scheduler</groupId>    <artifactId>quartz</artifactId>    <version>2.3.0</version></dependency> spring配置quartz的xml <beans xmlns="http://www.springframewor

SpringBoot集成Quartz动态定时任务

项目中需要用到定时任务,考虑了下java方面定时任务无非就三种: 用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也可以实现关闭和开启(timer.cancle).但是用其来实现某天的某个时间或者某月的某一天调度任务有点不方便. 采用Quartz 调度器实现.这是一个功能很强大的开源的专门用于定时任务调度的框架,也很好的和springboot整合,缺点:配置复杂,需要花费一定的时间去了解和研究. spring3.0以后自带的s

在SSH框架中使用Spring的好处

在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来做应用层的,他它负责调用业务逻辑serivce层.所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)   struts负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的依

【夯实基础】Spring在ssh中的作用

尊重版权:http://blog.csdn.net/qjlsharp/archive/2009/03/21/4013255.aspx 写的真不错. 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来做应用层的,他它负责调用业务逻辑serivce层.所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)

在SSH框架中使用Spring的好处(转)

以下是我总结下今天笔试中SSh中的总结: 在SSH框架中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句.Struts是用来做应用层的,他它负责调用业务逻辑serivce层.所以SSH框架的流程大致是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)    struts负责控制Service(业务逻辑处理类),从而控制了