① 有哪位大神對quartz作業調度的資料庫持久化熟悉的
quartz只是一個定時框架,能做很多事情,你所說的資料庫持久化是指,在定時任務中進行操作資料庫嗎
② 設置quartz時間時如何存入資料庫
quartz一般只這樣使用。
1、web.xml中進行相關配置
2、quartz進行邏輯操作
當應用伺服器開啟,quartz也相對開啟。
③ Java中定時任務quartz如何將歷史數據寫入新表
我建議的做法是在資料庫中建一些Quartz的表,MySQL的建、刪表腳本,最主要的修改是quartz.properties,如果你使用的是其他資料庫,可以下載Quartz的distribution,在\docs\dbTables下。然後我們可以啟動Bootstrap類,注冊、運行定時任務。你可以發現MySQL的表中已經有此定時任務的記錄了。
然後你可以停止Bootstrap類,將Bootstrap類中關於注冊、啟動定時任務的代碼刪除或注釋,然後啟動Bootstrap類,看上一次操作注冊的定時任務會不會繼續運行。
如無意外,看上一次操作注冊的定時任務會繼續運行。
④ 如何在quartz的job任務中操作資料庫
資料庫中建表。建表模版在Quartz包下docs/dbTables下,選擇相應的資料庫和版本即可。ORACLE的11個Table列表如下:
QRTZ_JOB_LISTENERS:存儲有關已配置的 JobListener 的信息
JOB_NAME
JOB_GROUP
JOB_LISTENER
QRTZ_TRIGGER_LISTENERS:存儲已配置的 TriggerListener 的信息
QRTZ_FIRED_TRIGGERS:存儲與已觸發的 Trigger 相關的狀態信息,以及相聯 Job的執行信息
QRTZ_PAUSED_TRIGGER_GRPS:存儲已暫停的 Trigger 組的信息
QRTZ_SCHEDULER_STATE:存儲集群中note實例信息,quartz會定時讀取該表的信息判斷集群中每個實例的當前狀態
INSTANCE_NAME 之前配置文件中org.quartz.scheler.instanceId配置的名字,就會寫入該欄位,如果設置為AUTO,quartz會根據物理機名和當前時間產生一個名字
LAST_CHECKIN_TIME:上次檢查時間
CHECKIN_INTERVAL :檢查間隔時間
QRTZ_LOCKS:存儲程序的悲觀鎖的信息(假如使用了悲觀鎖)
QRTZ_SIMPLE_TRIGGERS:存儲簡單的Trigger,包括重復次數,間隔,以及已觸的次數
TRIGGER_NAME :qrtz_triggers表trigger_name的外鍵
TRIGGER_GROUP:qrtz_triggers表trigger_group的外鍵
REPEAT_COUNT :重復次數
REPEAT_INTERVAL:時間間隔
TIMES_TRIGGERED:觸發次數
QRTZ_CRON_TRIGGERS:存儲cron表達式表
TRIGGER_NAME :qrtz_triggers表trigger_name的外鍵
TRIGGER_GROUP:qrtz_triggers表trigger_group的外鍵
CRON_EXPRESSION:cron表達式
TIME_ZONE_ID :時區
QRTZ_TRIGGERS:保存trigger信息
⑤ quartz定時器問題,要往資料庫插入數據,報no session
定時器的資料庫腳本有沒有導入
給你看下我的配置
⑥ spring配置quartz後怎麼訪問資料庫
quartz定時任務配置:
<bean id="scheler"
class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
</list>
</property>
</bean>
其中:
<ref bean="ActionCronTrigger"/>
<ref bean="ActionOrderCronTrigger"/>
<ref bean="InquiryCronTrigger"/>
配置對應的定時任務,可配置多個,名稱要唯一,對應的是第二步中配置的CronTriggerFactoryBean
CronTriggerFactoryBean配置,由於要實現動態讀取定時任務周期時間,所以我們要寫一個類實現CronTriggerFactoryBean,類的內容如下:
public class InitCronTriggerFactoryBean extends CronTriggerFactoryBean implements Serializable {
private static final long serialVersionUID = 1L;
private SysParamServiceImpl sysParamServiceImpl;
private String key;
public void setKey(String key)
{
this.key = key;
}
public void setSysParamServiceImpl(SysParamServiceImpl sysParamServiceImpl)
{
this.sysParamServiceImpl = sysParamServiceImpl;
setCronExpression(getCronExpressionFromDB());
}
private String getCronExpressionFromDB()
{
if(StringUtils.isEmpty(key))
return "0 0 0/1 * * ?";
SysParam sysParam = new SysParam();
try
{
sysParam = sysParamServiceImpl.getNameByKey(key);
}
catch (Exception e)
{
e.printStackTrace();
}
if(sysParam != null && !StringUtils.isEmpty(sysParam.getParamValue()))
return sysParam.getParamValue();
return "0 0 0/1 * * ?";
}
}
簡單說明一下:key是用來查詢資料庫配置的CronExpression表達式的查詢條件,SysParamServiceImpl 是實現查詢的類,這幾個參數都要從spring配置的CronTriggerFactoryBean參數獲取,注意,配置的時候,key值的配置要在SysParamServiceImpl 的配置之前,否則報空指針
spring配置CronTriggerFactoryBean:
實現了CronTriggerFactoryBean之後,開始配置CronTriggerFactoryBean,現在配置的是InitCronTriggerFactoryBean :
<bean id="InquiryCronTrigger" class="cn.com.shopec.quartz.utils.InitCronTriggerFactoryBean">
<property name="jobDetail" ref="InquiryJobDetail" />
<property name="key" value="inquiryQuartzParam" />
<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />
</bean>
id對應quartz定時任務配置的<ref bean="InquiryCronTrigger"/>,參數有三個,第二個和第三個是InitCronTriggerFactoryBean設置內容需要的,第一個<property name="jobDetail" ref="InquiryJobDetail" />則是定時任務執行業務邏輯的類
ps:<property name="sysParamServiceImpl" ref="sysParamServiceImpl" />,這個要配置對應的bean,我的是
<bean id="sysParamServiceImpl" class="cn.com.shopec.core.system.service.impl.SysParamServiceImpl">
</bean>
配置對應的定時任務執行業務方法的類:
<bean id="InquiryJobDetail"
class="org.springframework.scheling.quartz.JobDetailFactoryBean">
<property name="rability" value="true" />
<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />
<property name="jobDataAsMap">
<map>
<entry key ="inquiryServiceImpl" value-ref="inquiryServiceImpl"/>
</map>
</property>
</bean>
簡單說明一下:<property name="jobClass" value="cn.com.shopec.quartz.utils.InquiryQuartz" />配置的是你需要定時執行的類,<property name="jobDataAsMap"> 下面配置的是定時執行類中需要用到的其他類,這是由於項目啟動執行定時任務不能在定時任務類中實例化這些類,要配置才行。
對應的定時任務執行類:
public class InquiryQuartz extends QuartzJobBean {
@Autowired
private InquiryServiceImpl inquiryServiceImpl;
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException
{
// 實例化介面
inquiryServiceImpl = (InquiryServiceImpl) arg0.getJobDetail().getJobDataMap().get("inquiryServiceImpl");
// 執行業務方法
quartzStart();
}
public void quartzStart(){
// 業務方法...
}
}
說明一下:必須要實現QuartzJobBean 介面
至此,就可以完成可配置CronExpression表達式的定時任務了!1
⑦ quartz+hibernate+spring 頻繁操作資料庫,出現 資料庫連接超過最大連接數
spring
quartz如何動態配置時間
1.
目的:動態設置時間,觸發相應的任務
2.
系統架構為
struts
+
spring
+
hibernate
3.
實現步驟:
在頁面上設置時間;
將時間轉換為unix
cron
expression;
將轉換後的時間規則表達式記錄到資料庫中(也可以寫...
⑧ quartz如何與hibernate共用數據源
quartz是定時調用的,是否你調用一次之後你的連接就關閉了,在hibernate裡面如果你要直接操作session的話可以用那個線程安全的session就是hibernateTemplate.getSessionFactory().getCurrentSession().connection()方法獲取的,這個session會自動管理的無須手動關閉。
⑨ 急求急求,quartz中有幾張資料庫表是要寫東西的怎麼寫,誰有動態添加job的項目
我最近也做了這樣一個項目,我也嘗試動態添加Job,這樣做有些困難。
所以我換了一種方法,可以實現同樣的效果。
我建議只設置一定數量的Job(其實一個就可以,比如你的任務是1個小時倍數的周期,可以設配置1個小時觸發一次),然後調用檢查所有需要運行的任務(可以建一張類似Job的業務表,記錄cronExpression和延時時時間),然後用cronExpression.getNextValidTimeAfter函數檢查下一個單位時間需要運行的任務,然後可以用其他的類似Timer來做定時執行。
請根據具體業務來設計,希望對你有幫助,謝謝!