1. 程式人生 > >spring quartz定時器

spring quartz定時器

1.引入quartz.jar包;如果使用的maven引入方式:

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
</dependency>

如果報錯,可能是jar包衝突,可以將quartz.jar換成其他版本。

2.配置quartz

<bean id="mailTask" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>cn.dayang.mis.question.common.QuestionTimerTask</value>
</property>
<property name="jobDataAsMap">
<map>
<entry key="questionBO">
<ref bean="questionBO"/>
</entry>
</map>
</property>
</bean>
<bean id="mailTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mailTask"/>
</property>
<property name="cronExpression">
<value>0 0 2 * * ?</value>
</property>
</bean>
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<ref bean="mailTaskTrigger"/>
</property>
</bean>

3.編寫執行類

public class QuestionTimerTask extends QuartzJobBean {
private QuestionBO questionBO;
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {

this.sendExceedEmail();
this.sendEveryDayEmail();

}

public void sendExceedEmail(){}

...

}

結果為每天凌晨兩點執行QuestionTimerTask

2015-07-09:

spring4.1.7,quartz 2.1.3,sl4j1.7.12,log4j 1.2.17配置如下:


1.配置:<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans> 
<bean id="pushTask" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass">
<value>weixin.timer.schedule.PushTimerTask</value>
</property>
<!--
<property name="jobDataAsMap">
<map>
<entry key="questionBO">
<ref bean="questionBO"/>
</entry>
</map>
</property>
-->
</bean>
<bean id="pushTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="pushTask"/>
</property>
<property name="cronExpression">
<value>0 0/1 9-18 ? * MON-FRI</value>
</property>
</bean>
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<ref bean="pushTaskTrigger"/>
</property>
</bean>
</beans>

2.定時程式實現類:

package weixin.timer.schedule;
import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;


import weixin.busi.service.PushMessage;
import weixin.common.util.AesException;
import weixin.common.util.SingletonObject;
public class PushTimerTask extends QuartzJobBean{
private Logger log=Logger.getLogger(PushTimerTask.class);
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
PushMessage pushMessage=SingletonObject.getPushMessageInstance();
try {
pushMessage.pushMessage();
} catch (AesException e) {
log.info("************由於aes解密失敗導致訊息推送失敗************");
e.printStackTrace();
}
log.info("************訊息推送方法呼叫完成************");
}


}

結果:每週週一至週五 9點至18點每隔一分鐘執行定時推送程式

相關推薦

spring-quartz 定時 給targetMethod傳遞引數

今天在做一個專案的時候,要給一個定時器任務的執行方法傳遞引數,在網上找了一下資料,可以使用arguments引數:   <bean id="subsidyJobDetail" class="org.springframework.scheduling.quartz

java spring-quartz定時實現定時任務

Quartz是一個大名鼎鼎的Java版開源定時排程器,功能強悍,使用方便,下面我們看看如何使用它 一、核心概念 Quartz的原理不是很複雜,只要搞明白幾個概念,然後知道如何去啟動和關閉一個排程程式即可。 1、Job 表示一個工作,要執行的具體內容。此介面中只有一個方法 vo

spring quartz定時

1.引入quartz.jar包;如果使用的maven引入方式: <dependency><groupId>org.quartz-scheduler</groupId>

spring quartz定時呼叫service層事務失效原因

專案中集成了activiti配置檔案遇到一個很詭異的問題,通過url方式呼叫controller,service層事務正常,但是spring quartz定時器呼叫service層時事務失效,經過反覆測試原因是:在activiti配置檔案中又重複配置了transactionM

spring quartz定時配置-JobStoreTX方式持久化在資料庫中

配置quartz持久化在資料庫中,同樣需要以下三步配置,如下: 首先需要引入quartz所依賴的jar包 建立quartz_jobs.xml檔案用於配置排程器 引入quartz_jobs.xml 只是在為quartz定時器配置資料庫時,在quartz_jobs.xm

Spring Quartz定時

而在Spring裡很好的集成了Quartz,在xml檔案裡面配一下時間就可以自動執行,不需要寫一行程式碼。   Xml程式碼   <bean id="methodInvokingJobDetail"      class="org.springframework

Spring quartz定時不報錯,但不執行

原理現在我還沒有太搞懂,可能是因為專案執行緒併發量太少導致。 解決方法: <bean id="helloJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryB

spring quartz定時--SimpleTriggerFactoryBean與CronTriggerFactoryBean

需求: 1.執行後,將mysql的資料同步到redis和(Spring建立)記憶體中的map 2.定時器每秒將redis修改的資料同步到map和mysql 一開始用監聽器(ContextLoaderListener)來調同步方法完成需求1, 由於監聽器無

Spring+Quartz定時結合呼叫service

一、Spring+Quartz定時器 1、所需JAR包: spring-context-support版本4.1.4、 quartz版本2.2.1 2、spring-scheduler.xml <?xml version="1.0" encoding="UTF-8"

spring + quartz定時

最近在專案中遇到了一個問題,就是專案在部署到伺服器的時候,啟動完成之後,定義的定時任務會出現執行兩次的情況,比如有三個方法:a,b,c,通過檢視發現他的執行順序是,a,a,b,b,c,c,當然也有a,b,b,a,cc之類的,總之是執行了兩次。通過網上查詢發現幾種情況。在此帖

spring整合Quartz定時

() void java類 info throws tex execute new protect 第一種:為普通java類中的某個方法配置跑批任務 1.定義要跑批的類和方法: package com.xy.utils.quartz; import org.joda.t

java定時Spring定時Quartz定時

   當前java程式中能夠實現定時的主要有三種方式,分別是:java定時器,spring定時器,quartz定時器。    下面依次講講他們的應用! java定時器的應用    其實java很早就有解決定時器任務的方法了,ja

Quartz定時使用-spring整合方式

Spring中使用Quartz的3種方法(MethodInvokingJobDetailFactoryBean,implements Job,extends QuartzJobBean) 動態啟動,暫定,新增,刪除定時功能,可傳引數 Quartz是一個強大的企業級任務排程框架,Spr

Quartz定時使用-非spring方式

1.建立工作的物件,實現job介面 //定義工作的類 public class HelloWorld implements Job{ public void execute(JobExecutionContext arg0) throws JobExecutionExcepti

java.util.Timer、QuartzSpring task定時任務的幾種實現方法

轉載:https://www.jb51.net/article/106445.htm 一.分類 從實現的技術上來分類,目前主要有三種技術(或者說有三種產品): 1.Java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式

關於Spring中用quartz定時定時到達時同時執行兩次的問題

我在使用spring的quartz配置定時任務時,發現每次定時時間到達後,指定的定時方法同時執行兩次,而且此方法還是使用的synchronized關鍵字,每次定時一到,會發現此方法內的System.out輸出資訊輸出兩次,說明方法在這時執行了兩次,解決方法沒有找到更好的,不過

java spring-mvc spring-boot quartz定時

1.java中定時任務類。java.util.Timer  java.util.TimerTask package com.jiayun.demo; import java.util.Timer; import java.util.TimerTask; public c

Spring --- java定時,Spring定時Quartz定時

  在現實生活中,會出現這樣的例子,比如燒水,一般燒了20分鐘後,水開了,會需要及時換水,再燒20分鐘,水又開了,繼續提醒,比如上班,每天早晨8點鐘的鬧鐘會及時提醒, 那麼在java程式中如何實現 這種 已經被設定了的定時的任務呢,在下面會依次介紹關於如何實現定時器來操作一

spring整合quartz定時的專案中,如何關閉不斷輸出的batch acquisition of 0 triggers ?

不斷輸出的batch acquisition of 0 triggers太鬧心了,嚴重影響了除錯效率,不能忍,經過查閱資料得出關閉方法。希望幫助更多的小夥伴。解決方法:在pom.xml中看看使用的是哪個

Springquartz定時同一時刻重複執行二次的問題解決

最近用Spring的quartz定時器的時候,發現到時間後,任務總是重複執行兩次,在tomcat或jboss下都如此。 打印出他們的hashcode,發現是不一樣的,也就是說,在web容器啟動的時候,重複啟了兩個quartz執行緒。 研究下來發現quartz確實會載入兩次: 第一次:web容器啟動的時候,