最近做一个小项目,要每7天去调用webservice获取一次数据。所以就用定时器来完成spring是4.1.6,quartz是2.2.1.

首先配置spring的xml文件。首先定义你要被执行的类

<!-- 被执行类 -->
<bean id="remote" class="com.real.api.utils.InfoQuartz"> </bean>

将用来调度的类注入到job中。其中targetMethod是你在被调度的方法。

    <!-- 将remoteQuartzJob注入到job中 -->
<bean id="remoteQuartzJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="remote" />
<property name="targetMethod" value="loadJob" />
<property name="concurrent" value="false" />
</bean>

再把job注入到触发器中。cronExpression里面的value是调度的时间配置,分别是1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11)6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)。被注释那个表示每一分钟的第2哦,40,59秒,下面这个表示每一分钟的第59秒。具体配置可参考http://jingyan.baidu.com/article/a3761b2b8e843c1576f9aaac.html

    <!-- 将job注入到定时触发器 -->
<bean id="remoteTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="remoteQuartzJob" />
<property name="cronExpression">
<!-- <value>20,40,59 * * * * ?</value> -->
<value>59 * * * * ?</value>
</property>
</bean>

接着把触发器注入到工程中。

<!-- 将触发器注入任务工程 -->
<bean id="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="remoteTrigger" />
</list>
</property>
</bean>

最后在原来被执行的的bean上加一个属性

<bean id="remote" class="com.real.api.utils.InfoQuartz">
<property name="scheduler" ref="schedulerFactory" />
</bean>

xml配置完成。接下来编写被调度的类。要调度的方法写在loadJob()中就行了。

package com.real.api.utils;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.annotation.Autowired; import com.real.api.servlet.DataProcessing; public class InfoQuartz {
@Autowired
private DataProcessing dataProcessing; public void loadJob() throws SchedulerException{
System.out.println(dataProcessing);
dataProcessing.insertData();
}
}

运行这个工程,能正确跑起来,执行定时调度任务。能正确打印出dataProcessing对象和执行insertData()方法

还有另外一种配置,但是有一点问题,不能自动注入。如果用这个配置,定时调度还是可以执行,但是,不能自动注入。每次打印出来的都是null。看了一下源码,但是还是没找出原因,如果有知道的同学可以提出来。非常感谢

<bean id="remote" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass">
<value>com.real.api.utils.RemoteQuartz</value>
</property>
</bean> <bean id="cronReportTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="remote"/>
</property>
<property name="cronExpression">
<value>20,40,59 * * ? * *</value>
</property>
</bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronReportTrigger"/>
</list>
</property>
</bean
package com.real.api.utils;

import javax.annotation.Resource;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component; import com.real.api.servlet.DataProcessing; @Component
public class RemoteQuartz extends QuartzJobBean{
@Autowired
private DataProcessing dataProcessing; @Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
/*dataProcessing.insertData();*/
System.out.println("dataProcessing:"+dataProcessing);
} }

基于spring和Quartz定时器的更多相关文章

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

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

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

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

  3. 关于Spring的Quartz定时器设定

    在实际的开发业务中经常会遇到定时执行某个任务,如果项目使用的ssh框架的话,就需要配合spring来使用定时器.spring的定时器是一个固定的配置格式,具体的applicationContext配置 ...

  4. 基于spring boot的定时器

    首先,搭建好一个springboot项目 方法一:通过springboot自带入口来开启定时器. 首先我们都知道,springboot有一个自己的入口,也就是@SpringBootApplicatio ...

  5. 基于spring的quartz定时框架,实现简单的定时任务功能

    在项目中,经常会用到定时任务,这就需要使用quartz框架去进行操作. 今天就把我最近做的个人主页项目里面的定时刷新功能分享一下,很简单. 首先需要配置一个配置文件,因为我是基于spring框架的,所 ...

  6. spring启动quartz定时器

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

  7. Spring集成Quartz定时器

    <!-- Spring集成Quartz开始 --> <bean id="startQuertz" lazy-init="false" auto ...

  8. 使用spring配置quartz定时器

    quartz是石英钟的意思,所以用这个名字来做定时器的框架名称再适合不过.一年前做项目的时候有用过这个框架,当时没有整理,今天刚好新的商城系统也需要定时器.想要达到的效果是:每天的固定时间,比如凌晨3 ...

  9. Spring整合Quartz定时器

    1.添加jar #此处省略spring核心jar包 <dependency> <groupId>org.quartz-scheduler</groupId> < ...

随机推荐

  1. linux软件包管理(下)

    在vi配置文件的编写的时候我们发现#并不能注释掉一行的信息 那什么才是linux标准的注释信息呢 查看软件对应的软件包命令 rpm –ap| grep vim 大多example是需要的事例文档  双 ...

  2. MVC5 视图 不显示 Styles.Render Scripts.Render 问题解决

    第一步:安装 WebGrease 使用 nuget 安装 WebGrease 安装依赖 第二步:修改配置文件 <configSections> <!-- For more infor ...

  3. 配合 APP 调用 JS 的一次尝试

    项目初衷 最初的场景是用户在对购物车的操作中,由于用户对购物车的每次操作(包括选择,调整数量)都需要计算商品的促销和分组的情况,而这段逻辑的计算都需要调用后端的接口,那么瓶颈来了: 请求时间长--一次 ...

  4. java线程同步 以及wait 和notify用法

    package test; public class ThreadTest2 extends Thread { private int threadNo; private String lock; p ...

  5. Nodejs:precss模块 & autoprefixer模块

    模块precss:可以通过他管理文件系统,文件的写入,删除等操作 模块autoprefixer: autoprefixer可以对sass处理过后的css再处理,解析CSS文件并且添加浏览器前缀到CSS ...

  6. VC++获取IDC_EDIT的7种方法

    VC++获取IDC_EDIT的7种方法 http://blog.csdn.net/baizengfei/article/details/7997618 //第一种方法 int number1, num ...

  7. 解决mysql数据库插入中文字段时出现??? 的问题

    1.检查并修改mysql的my.ini的配置文件   default-character-set=utf8 2.建立数据库是要指定字符集   create database mydb default ...

  8. TabSiPlus发布1749版本

    拖了几天,终于可以发布了,下载地址如下: http://www.winmsg.com/download/TabSiPlus_0_99b2_1749.rar 这个包里没有附带VC的运行库,考虑到大多数人 ...

  9. VS2012 提示未找到与约束 ContractName 匹配的倒出

    问题描述: 今天由于开发需要,我安装了一下 Vs 2015 按照之后 打开原来的项目 vs2012 打开,点击类文件提示错误 未找到与约束 ContractName 匹配的倒出 解决办法: 1  去微 ...

  10. servlet中service() 和doGet() 、doPost() 学习笔记

    Sevlet接口定义如下: 与Sevlet接口相关的结构图: service() 方法是 Servlet 的核心.每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要 ...