⑴ Quartz資料庫動態定時器Repeat count must be >= 0
引用 11 樓差凱 zhujia 的回復:貌似把那個timer弄成靜態變數,在全局裡面hold住就不會被回收了 引用 6 樓 ... 方法內寫如下代敗慶旁察橡碼:System.Timers.Timer objTimer = new System.Timers.Timer();objTimer.Interval = 時間; //這個時...
⑵ quartz 怎麼通過資料庫設置
可以做個動態的任務管理
⑶ spring 4 quartz 2.x動態配置triggers
spring 4.x沒有配置過,這里有一個spring 3.x 的quartz定時配置,你參考參考:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<!--
1、JobDetail:JobDetail是一個具體的類。
2、Trigger:觸發器,它用於定義Job何時執行。最常用的是SimpleTrigger和CronTrigger。
一般來說,如果你需要在一個固定的時間和重復次數或者一個固定的間隔時間,那麼SimpleTrigger比較合適;
如果你有許多復雜的作業調度,那麼CronTrigger比較合適。
CronTrigger和Unix的cron機制基本一樣,我們需要的只是一個cron表達式。
比如「0012**?」會在每天中午12點觸發執行;「01510槐嫌?*6L」會在每個月的最後一個星期五的早上10:15觸發Job執行。
鉛態手3、Scheler和SchelerFactory:Scheler負責管理Trigger、調度Job,
SchelerFactory則是Scheler工廠,負責生成Scheler。
-->
<!--總管理類如果將lazy-init='false'那麼容器啟動就會執行調度程序-->
<beanclass="org.springframework.scheling.quartz.SchelerFactoryBean"lazy-init="false">
<!--通過屬性配置spring上下文[此屬性可省略]-->
<propertyname="">
<value>applicationContext</value>
</property>
<propertyname="triggers">
<list>
<!--作業調度器,list下可加入其他的調度器-->
<refbean="testTrigger"/>
</list>
</property>
<propertyname="autoStartup"value="true"/>
</bean>
<!--要調度的對象-->
<beanid="testJob"class="name.zealze.test.JobTest"/>
<beanid="testTrigger"class="org.springframework.scheling.quartz.CronTriggerBean">
<propertyname="jobDetail"ref="testJobDetail"/>
<!--按cron表達式時間點觸發事件http://cron.qqe2.com/-->
<propertyname="cronExpression"value="00/2***?"/>
</bean>
<beanid="testJobDetail"class="org.springframework.scheling.quartz.">
<propertyname="targetObject"ref="testJob"/>
<propertyname="targetMethod"value="execute"/>
<!--是否允許任務閉銷並發執行。當值為false時,表示必須等到前一個線程處理完畢後才再啟一個新的線程-->
<propertyname="concurrent"value="false"/>
</bean>
</beans>
⑷ 如何在quartz的job任務中操作資料庫
quartz定時任務時間
<?xml version="1.0" encoding="UTF-8"?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchelingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" overwrite-existing-jobs="true">
<job>
<job-detail>
<name>sendMail</name>
<group>default</group>
<description>定時發送郵件提配</description>
<job-class>com.longing.mail.SendMailJob</job-class>
<job-data-map allows-transient-data="true">
<entry>
<key>url</key>
<value>http://localhost/userSites/gat/index.jsp</value>
</entry>
<entry>
<key>destPath</key>
<value>\\default.html</value>
</entry>
<entry>
<key>chartset</key>
<value>utf-8</value>
</entry>
<entry>
<key>Strat</key>
<value>true</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>hourTaskJob-trigger</name>
<group>default</group>
<job-name>sendMail</job-name>
<job-group>default</job-group>
<cron-expression>0 0 16 * * ?</cron-expression>
</cron>
</trigger>
</job>
</quartz>
package com.longing.mail;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SendMailJob implements Job{
public static synchronized boolean start(String page, String filePath,
String chartset) throws Exception {
System.out.print("發送郵件");
MailDo.sendHtmlMail("[email protected]", "恭喜您,成功注冊為ISS OA企業用戶", "恭喜您,注冊成功");
return true;
}
public void execute(JobExecutionContext jeCtx) throws JobExecutionException {
//String page=jeCtx.getJobDetail().getJobDataMap().getString("url");
//String filePath=jeCtx.getJobDetail().getJobDataMap().getString("destPath");
//String chartset="utf-8";
try {
SendMailJob.start("", "", "");
} catch (Exception e) {
e.printStackTrace();
}
}
}
⑸ springboot+quartz持久化到資料庫各表含義
1、去quartz官網下載quartz2.2.2版本的壓縮包,quartz下載,注意:quartz2.3.0版本的在docs目錄下沒有發現dbtable目錄(存放生成資料庫表的sql文件的目錄)。
2、做纖執行創建資料庫表的sql文件,我使用的是mysql資料庫。
生成的表結構
3、在springboot項目中配置quartz。
3.1、兩種方式配置quartz,
3.1.1、第一種是使用自定義的quartz.properties,這是簡單配置,如果有其他配置可以參考,quartz.properties配爛顫置詳情
org.quartz.jobStore.useProperties:true
#org.quartz.scheler.instanceName: quartzScheler
#org.quartz.scheler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 15
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.: true
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.isClustered = false
#org.quartz.jobStore.clusterCheckinInterval=20000
org.quartz.jobStore.tablePrefix = qrtz_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.scheler.rmi.export: false
org.quartz.scheler.rmi.proxy: false
org.quartz.scheler.: false
登純歷仿錄後復制
3.1.2、使用配置文件配置springboot中的SchelerFactoryBean。
@Configuration
public class SchelerConfig implements SchelerFactoryBeanCustomizer {
@Autowired
private DataSource dataSource;
@Override
public void customize(SchelerFactoryBean schelerFactoryBean) {
schelerFactoryBean.setStartupDelay(10);
schelerFactoryBean.setOverwriteExistingJobs(true);
schelerFactoryBean.setDataSource(dataSource);
ClassPathResource resource = new ClassPathResource("quartz.properties");
Properties properties = new Properties();
InputStream in= null;
try {
in = resource.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(in, "UTF-8"));
properties.load(bf);
schelerFactoryBean.setQuartzProperties(properties);
} catch (IOException e) {
e.printStackTrace();
}
}
}
登錄後復制
3.2.1、第二種方式是在application.properties文件中的配置,application.properties文件中的spring.quartz.properties. 加上quartz.properties中的鍵值對,效果與quartz.properties類似。
spring.quartz.properties.org.quartz.jobStore.tablePrefix = qrtz_
spring.quartz.properties.org.quartz.threadPool.threadCount = 10
登錄後復制
項目中配置org.quartz.jobStore.tablePrefix = qrtz_,這個配置是默認查詢資料庫中表的前綴,默認是QRTZ_,以下sql中通過rpt方法組裝一條新的sql,替換掉{0},{1},如果沒有明確聲明就會使用默認值 org.quartz.jobStore.tablePrefix = QRTZ_,org.quartz.scheler.instanceName: quartzScheler。
如果進行簡單的定時任務,可以使用springboot中默認的quartz配置。
3.2.2 自定義配置springboot中的SchelerFactoryBean。
@Configuration
public class SchelerConfig implements SchelerFactoryBeanCustomizer {
@Autowired
private DataSource dataSource;
@Override
public void customize(SchelerFactoryBean schelerFactoryBean) {
schelerFactoryBean.setStartupDelay(10);
schelerFactoryBean.setOverwriteExistingJobs(true);
schelerFactoryBean.setDataSource(dataSource);
}
}
登錄後復制
4、新建Job
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println(System.nanoTime());
}
}
登錄後復制
5、資料庫中新增job任務腳本,com.example.quartzdemo.job.TestJob是我本地的測試Job,需要修改成你自己Job類。
INSERT INTO `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('quartzScheler', 'test2Job', 'testGroup', NULL, 'com.example.quartzdemo.job.TestJob', '1', '0', '0', '0', NULL);
INSERT INTO `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('quartzScheler', 'testTrigger2', 'testTriggerGroup', 'test2Job', 'testGroup', NULL, '1554122914000', '1554122913000', '5', 'ACQUIRED', 'CRON', '1554039857000', '0', NULL, '0', NULL);
INSERT INTO `qrtz_cron_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('quartzScheler', 'testTrigger2', 'testTriggerGroup', '0/1 * * * * ?', 'Asia/Shanghai');
登錄後復制
6、啟動項目,查看控制台列印的日誌,成功
⑹ quartz可以實現同時執行一千個任務這樣的需求嗎
你的問題我想分兩部分回答:
1.quartz有資料庫方式保存job,以及觸發器這些數據的
具體可以看我的一篇blog:
quartz資料庫方式與web工程整合
裡面還有一個中文版的quartz的指南,可以幫你搞定資料庫方式的quartz
2.至於你說的1000個觸發器,這么多的任務調度我沒咐宴做過,不清楚結衡念銀果會高液怎麼樣,這部分還需要再研究一下。
轉載
⑺ quartz2.2 不按規定時間執行,有人遇到過嗎
應該是拋棄吧 等待下一個時間點執行! 我的做法是將沒有執行或執行失敗的任務記錄下來,然後寫一個定時任務,去執行沒有完成的任務。
在quartz的資料庫中 表QRTZ_TRIGGERS
中記毀液錄了陸飢任務的執行時間,可以利用這早余返個做個試驗或者對你的程序做些處理
⑻ quartz如何通過資料庫動態調用時間
quartz 是頭像插件,能幫你監控下BUFF和DEBUFF。是不能監控的你陷阱時間的。
只能另外找其它插件。大腳插件包里有的。
如果裝大腳。你要把大腳的頭像增強關掉
⑼ quartz+hibernate+spring 頻繁操作資料庫,出現 資料庫連接超過最大連接數
spring
quartz如何動態來配源置時間
1.
目的:動態設置時間,觸發相應的任務
2.
系統架構為
struts
+
spring
+
hibernate
3.
實現步驟:
在頁面上設置時間;
將時間轉換為unix
cron
expression;
將轉換後的時間規則表達式記錄到資料庫中(也可以寫...
⑽ 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