當前位置:首頁 » 操作系統 » 資料庫的定時器

資料庫的定時器

發布時間: 2023-07-12 12:13:57

1. Quartz資料庫動態定時器Repeat count must be >= 0

引用 11 樓 zhujia 的回復:貌似把那個timer弄成靜態變數,在全局裡面hold住就不會被回收了 引用 6 樓 ... 方法內寫如下代碼:System.Timers.Timer objTimer = new System.Timers.Timer();objTimer.Interval = 時間; //這個時...

2. 資料庫集群,怎麼解決spring定時器的重復問題

有兩種流行Spring定時器配置:java的Timer類和OpenSymphony的Quartz。

1.Java Timer定時

首先繼承java.util.TimerTask類實現run方法

import java.util.TimerTask;
public class EmailReportTask extends TimerTask{
@Override
public void run() {
...
}
}
在Spring定義

...

配置Spring定時器

<bean id="scheleReportTask" class="org.springframework.scheling.timer.ScheledTimerTask">
<property name="timerTask" ref="reportTimerTask" />
<property name="period">
<value>86400000value>
property>
bean>
timerTask屬性告訴ScheledTimerTask運行哪個。86400000代表24個小時

啟動Spring定時器

Spring的TimerFactoryBean負責啟動定時任務

<bean class="org.springframework.scheling.timer.TimerFactoryBean">
<property name="scheledTimerTasks">
<list><ref bean="scheleReportTask"/>list>
property>
bean>
scheledTimerTasks里顯示一個需要啟動的定時器任務的列表。
可以通過設置delay屬性延遲啟動
<bean id="scheleReportTask" class="org.springframework.scheling.timer.ScheledTimerTask">
<property name="timerTask" ref="reportTimerTask" />
<property name="period">
<value>86400000value>
property>
<property name="delay">
<value>3600000value>
property>
bean>
這個任務我們只能規定每隔24小時運行一次,無法精確到某時啟動

2.Quartz定時器

首先繼承QuartzJobBean類實現executeInternal方法

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheling.quartz.QuartzJobBean;

public class EmailReportJob extends QuartzJobBean{
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
...
}
}
在Spring中定義

<bean id="reportJob" class="org.springframework.scheling.quartz.JobDetailBean">
<property name="jobClass">
<value>EmailReportJobvalue>
property>
<property name="jobDataAsMap">
<map>
<entry key="courseService">
<ref bean="courseService"/>
entry>
map>
property>
bean>
在這里我們並沒有直接聲明一個EmailReportJob Bean,而是聲明了一個JobDetailBean。這個是Quartz的特點。JobDetailBean是Quartz的org.quartz.JobDetail的子類,它要求通過jobClass屬性來設置一個Job對象。

使用Quartz的JobDetail中的另一個特別之處是EmailReportJob的courseService屬性是間接設置的。JobDetail的jobDataAsMap屬性接受一個Map,包括設置給jobClass的各種屬性,當。JobDetailBean實例化時,它會將courseService Bean注入到EmailReportJob 的courseService 屬性中。

啟動定時器

Quartz的org.quartz.Trigger類描述了何時及以怎樣的頻度運行一個Quartz工作。Spring提供了兩個觸發器SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean與scheledTimerTasks類似。指定工作的執行頻度,模仿scheledTimerTasks配置 .

<bean id="simpleReportTrigger" class="org.springframework.scheling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="reprotJob" />
<property name="startDelay">
<value>360000value>
property>
<property name="repeatInterval">
<value>86400000value>
property>
bean>
startDelay也是延遲1個小時啟動

CronTriggerBean指定工作的准確運行時間

<bean id="cronReportTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reprotJob" />
<property name="cronExpression">
<value>0 0 6 * * ?value>
property>
bean>
屬性cronExpression告訴何時觸發。最神秘就是cron表達式:

Linux系統的計劃任務通常有cron來承擔。一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。從左到右:

1.秒2.分3.小時4.月份中的日期(1-31)5.月份(1-12或JAN-DEC)6.星期中的日期(1-7或SUN-SAT)7.年份(1970-2099)
每個元素都顯示的規定一個值(如6),一個區間(9-12),一個列表(9,11,13)或一個通配符(*)。因為4和6這兩個元素是互斥的,因此應該通過設置一個問號(?)來表明不想設置的那個欄位,「/」如果值組合就表示重復次數(10/6表示每10秒重復6次)。

啟動定時器

<bean class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list><ref bean="cronReportTrigger"/>list>
property>
bean>
triggers屬性接受一組觸發器。

熱點內容
linux分區表查看 發布:2025-03-16 21:20:17 瀏覽:643
java多個if 發布:2025-03-16 21:15:46 瀏覽:694
可樂存儲 發布:2025-03-16 21:15:07 瀏覽:871
ios遷移安卓用什麼助手 發布:2025-03-16 20:12:42 瀏覽:720
python異常值處理 發布:2025-03-16 20:12:42 瀏覽:581
POtn編程 發布:2025-03-16 20:06:11 瀏覽:776
競彩資金怎麼配置 發布:2025-03-16 20:01:57 瀏覽:10
在終端中打開編譯環境 發布:2025-03-16 19:57:34 瀏覽:601
sqlserver安裝資料庫 發布:2025-03-16 19:57:01 瀏覽:36
如何關掉廣告推送安卓 發布:2025-03-16 19:43:32 瀏覽:959