導航:首頁 > 編程語言 > java定時器quartz

java定時器quartz

發布時間:2022-07-26 02:33:29

『壹』 java定時器 timer.schele(new SvgListener(), 0, 20160*60*1000);

你可以嘗試用quartz去實現嘛!
1、編寫quartz.properties文件:代碼如下:
#============================================================================
# Configure Main Scheler Properties
#============================================================================
org.quartz.scheler.instanceName = QuartzScheler
org.quartz.scheler.instanceId = AUTO
#org.quartz.scheler.rmi.export = false
#org.quartz.scheler.rmi.proxy = false
#============================================================================
# Configure ThreadPool
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure Plugins
#============================================================================
#org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = /scheler/quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
2、編寫quartz_job.xml
<?xml version='1.0' encoding='utf-8'?>
<quartz>
<job>
<job-detail>
<name>test</name>
<group>DEFAULT</group>
<description>testJobhere</description>
<job-class>scheler.TestJob</job-class>
<job-data-map allows-transient-data="true">
<entry>
<key>name</key>
<value>test</value>
</entry>
</job-data-map>
</job-detail>
<trigger>
<cron>
<name>testCron</name>
<group>DEFAULT</group>
<job-name>test</job-name>
<job-group>DEFALUT</job-group>
<!--x/? x表示間斷啟動時間 ?表示執行間隔時間 13啟動時間-->
<cron-expression>0 1/2 23 * * ?</cron-expression>
<!--每月1號0點執行
<cron-expression>0 1 0 1 1-12 ?</cron-expression>
-->
</cron>
</trigger>
</job>
3、編寫java代碼進行測試:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class ZeroCount implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException
{
String name = context.getJobDetail().getJobDataMap().getString("name");
System.out.println(name);

}
}
出下以下結果表示配置成功:
test
4、此步驟是最後一步也是最重要的一步,只要加入如下代碼的到/WEB-INF/web.xml文件中在指定的時間內就會執行系統調度.
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
<init-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheler-on-load</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

『貳』 javaweb,監聽器和定時器(Quartz)互相調控的問題

publicclassListener{
publicstaticObjectlock=newObject();
publicvoidrun(){
while(true){
synchronized(Listener.lock){
if(hasData()){
//docheckdata
}
nodifyForLock();
}
threadSleep();
}
}

publicstaticbooleanhasData(){
//returnhasdata
}

publicstaticvoidthreadSleep(){
//sleep5second
}

privatevoidnodifyForLock(){
Listener.lock.notify();
}
}

publicclassQuartz{
publicvoidrun(){
synchronized(Listener.lock){
if(Listener.hasData()){
waitForLock();
}
//doquartz
}
}

privatevoidwaitForLock(){
try{
Listener.lock.wait();
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}


使用同步鎖機制,確保監聽器和定時器不會同時運行。

使用Wait Nodify機制,確保有數據時定時器會等待,直到數據處理完成。

『叄』 如何監控java quartz定時器中的所有定時任務

眾所周知spring 的Quartz定時器的功能非常強大,可以在特定的年月日小時分秒的時間點觸發時間,完成事件的調度,就像windows中得計劃任務一樣。下面看一個典型的Quartz定時器的實現:
1、首先實現一個用於被執行的類,這個類用於被定時器調度,這個類不需要繼承任何類或者介面,代碼如下:
publicTestQuartz{
public void doSomething(){ //TODO } }
2、spring配置文件,具體配置
<!-- 被執行類 -->
<beanid="testQuarzt"class="test.testQuarzt"/>
<!-- 將testQuarzt注入到job中 -->
<beanid="testQuartzJob"class="org.springframework.scheling.quartz.">
<property name="targetObject" ref="testQuarzt" /> <property name="targetMethod" value="doSomething" /> <property name="concurrent" value="false" /> </bean>
<!-- 將job注入到定時觸發器 -->
<beanid="testTrigger"class="org.springframework.scheling.quartz.CronTriggerBean"> <property name="jobDetail" ref="testQuartzJob" /> <property name="cronExpression"> <value>0 0 6 * * ?<value> <property> <bean>
<!-- 將定時觸發器注入任務工程 -->
<beanclass="org.springframework.scheling.quartz.SchelerFactoryBean"> <property name="triggers"> <list>

『肆』 Timer和spring的Quartz兩種定時器的區別

第一個例子。timer定時器。(這個比較簡單,timer是Java.util包下一個類)
為了更好的了解,我寫了兩個定時器類,很被集成TimerTask。
public class MyTask extends TimerTask{
int count = 0;
public void run() {
System.out.println("定時器TimerTask啟動"+count);
count++;
}

}
++++++++++++++++++++++++++++++++++++++++++++

public class MyTaskB extends TimerTask{
int count = 0;
public void run() {
System.out.println("定時器MyTaskB啟動"+count);
count++;
}
}
+++++++++++++++++++++++++++++++++++++++++++

在main方法中測試
Timer timer=new Timer();
/**
* 定時器任務制定,執行
* @param tag: 0.在指定的時間里,執行指定的任務;
* 1.在指定的時間里,按照指定的延遲,重復執行指定任務;
* 2.從指定的延遲後,執行指定任務;
* 3.從指定的延遲後,按照指定的延遲,重復執行指定的任務。
*
* @param mydate:指定的執行時間。只有在tag等於0、1才需要指定。
* @param delay: 延遲執行時間,毫秒數。只有在tag等於1、3才需要指定。
* @param period:間隔執行時間,毫秒數。只有在tag等於4才需要指定。
*/

//定時器,執行任務測試
public static void main(String[] args) {
new TestA().timer.schele(new MyTask(), 1000);
new TestA().timer.schele(new MyTaskB(), 4000);
}

註:timer還可以在web中應用。直接把MyTask()和MyTaskB()裡面的方法作修改即可,也可以在任務完成後關掉timer定時。
總結:其實timer實現定時任務是很簡單的,但是在想法開發是很少用到timer,而是用spring的Quartz。我也在網上找到了一些資料,現在總結一下。
1. Java定時器沒有持久化機制。
2. Java定時器的日程管理不夠靈活(只能設置開始時間、重復的間隔,設置特定的日期、時間等)//這點感同身受
3. Java定時器沒有使用線程池(每個Java定時器使用一個線程)//想必在用timer是遇到了吧。
4. Java定時器沒有切實的管理方案,你不得不自己完成存儲、組織、恢復任務的措施

一下例子是我在myeclipse中創建了一個小項目,僅供參考。

第一步建立web項目(省略)

第二步導入必要包:如下
用到了一下包:
(這九個包我就不多說了,想必大家都知道他的用處。)
第三步:配置相關文件。web.xml、quartz.properties、quartz_job.xml這三個文件。這里我就沒用spring的applicationContext.xml文件來管理了。其實原理都是一樣,都是在web啟動時監聽並啟動定時器。配置spring的quartz定時器有兩種方法,一種是你用quartz.properties、quartz_job.xml,另外一種是用spring的applicationContext.xml。其實在開發的時候我還是比較喜歡前面一種,因為簡單、方便,而用spring的applicationContext.xml裡面本來就有各種配置,各種注入,是文件不夠清晰(個人見解。呵呵)
(項目中文件的位置,直接放在src目錄下)
第四步:web.xml文件配置(監聽和啟動定時器)

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>

<!-- timer -->
<context-param>
<param-name>config-file</param-name>
<param-value>/quartz.properties</param-value>
</context-param>

<context-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</context-param>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

第五步:配置quartz.properties文件

org.quartz.scheler.instanceName = TestScheler
org.quartz.scheler.instanceId = one

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml

註解:主要主用是啟動quartz_job.xml。其餘的都是一些配置性能的屬性,可以在網上查看。
第六步:配置quartz_job.xml(裡面主要配置定時器的一下屬性)

<?xml version="1.0" encoding="GBK"?>
<quartz>
<!-- 每1分鍾執行一次 -->
<job>
<job-detail>
<name>getDate</name><!-- 表示目標定時器的方法(也就是這個方法要定時的作用)-->
<group>job</group>
<job-class>com.timer.util.TimerTask</job-class><!-- 表示上面的getDate()方法路徑(即所在的包)-->
</job-detail>
<trigger>
<cron>
<name>t1</name>
<group>job</group>
<job-name>getDate</job-name>
<job-group>job</job-group>
<cron-expression>0 0/1 * * * ?</cron-expression><!-- 設置定時器的觸發時間即間隔時間(參數形式可以在網上查到自己想要的形式)-->
</cron>
</trigger>
</job>

</quartz>

第七步:寫用兩個類來測試定時器是否好用。

public class TimerTask implements Job {

private static Logger logger = Logger.getLogger(TimerTask.class);

public void execute(JobExecutionContext arg0) throws JobExecutionException {
try {
TimerOperation.getDate();
} catch (Exception ex) {
logger.info(ex.getMessage());
}
}

}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class TimerOperation {
private static Logger logger = Logger.getLogger(TimerOperation.class);
public static void getDate()
{
String strCurrentDateTime = "";
Date currentDateTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
strCurrentDateTime = formatter.format(currentDateTime);
logger.info("定時器啟動"+strCurrentDateTime);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
寫這兩個類就會看出,定時器不能直接調用自己寫了定時方法,要先寫一個類實現job的介面,然後在實現介面的execute()方法裡面調用自己事先寫好的定時任務。
好了一個定時器就寫好了。運行項目,等待一分鍾控制台就會出現

『伍』 java 定時器 quartz向class文件中傳值 只能是傳String類型嗎

String類型比較通用,傳輸更方便。使用其他類型需要轉換,而且傳輸的過程還是傳輸字元

『陸』 有java高手么,用過定時器quartZ的,為什麼本地eclipse可以執行,放伺服器上就不執行

我估計是本地時間和伺服器時間不一致導致的。
當在本地eclipse運行時,伺服器在本地,假如定時器是要在五點做點什麼,
伺服器(也就是你本地了,也就是你電腦時間)到五點的時候,就開始運行,不會有偏差。
當你部署到別的地方時,當本地時間五點了,但是伺服器時間(就是部署代碼的那台電腦時間)才
四點五十九,所以就沒運行。

『柒』 java業務層和spring quartz定時器的問題。。。

test.java應該是個抽象類或者介面吧,testImpl.java在實現時必須實現抽象方法的。

『捌』 java quartzTask 定時器啟動不了問題,問題如圖,在線等,謝謝

我感覺沒什麼問題,不過這個bean你配了嗎

還有就是是不是時間沒到我看你配的時間是2點15,那應該是凌晨,,,,,,

『玖』 java:如何使用 quartz定時執行任務,例如定時執行System.out.pintln("aa");看清楚用quartz

}
importstaticorg.quartz.CronScheleBuilder.cronSchele;
importstaticorg.quartz.JobBuilder.newJob;
importstaticorg.quartz.TriggerBuilder.newTrigger;

importjava.text.SimpleDateFormat;
importjava.util.Date;

importorg.quartz.CronTrigger;
importorg.quartz.JobDetail;
importorg.quartz.Scheler;
importorg.quartz.SchelerFactory;
importorg.quartz.impl.StdSchelerFactory;

publicclassTest{
publicvoidgo()throwsException{
//首先,必需要取得一個Scheler的引用
SchelerFactorysf=newStdSchelerFactory();
Schelersched=sf.getScheler();
//jobs可以在scheled的sched.start()方法前被調用

//job1將每隔30分鍾執行一次
JobDetailjob=newJob(myJob.class).withIdentity("job1","group1").build();
CronTriggertrigger=newTrigger().withIdentity("trigger1","group1").withSchele(cronSchele("00/30***?")).build();
Dateft=sched.scheleJob(job,trigger);
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ssSSS");
System.out.pintln("aa");


//開始執行,start()方法被調用後,計時器就開始工作,計時調度中允許放入N個Job
sched.start();
try{
//主線程等待一分鍾
Thread.sleep(60L*1000L);
}catch(Exceptione){}
//關閉定時調度,定時器不再工作
sched.shutdown(true);
}

publicstaticvoidmain(String[]args)throwsException{

Testtest=newTest();
test.go();
}

}

『拾』 有java高手么,用過定時器quartZ的,急急急!給20分!可以再追加!

大哥,你要是急的話,就先按照例子,讓功能先實現,交了差然後自己再慢慢研究...

閱讀全文

與java定時器quartz相關的資料

熱點內容
郭天祥單片機實驗板 瀏覽:597
伺服器有什麼危害 瀏覽:256
飢荒怎麼開新的獨立伺服器 瀏覽:753
文件夾變成了 瀏覽:560
linuxpython綠色版 瀏覽:431
怎麼下載小愛同學音箱app 瀏覽:554
python佔位符作用 瀏覽:76
javajdbcpdf 瀏覽:543
php網頁模板下載 瀏覽:192
python試講課pygame 瀏覽:409
安居客的文件夾名稱 瀏覽:677
家裡伺服器如何玩 瀏覽:451
網站源碼使用視頻 瀏覽:748
stc89c52單片機最小系統 瀏覽:452
郵件安全證書加密 瀏覽:416
雲伺服器如何訪問百度 瀏覽:279
常州電信伺服器dns地址 瀏覽:839
用小方塊製作解壓方塊 瀏覽:42
圖像壓縮編碼實現 瀏覽:68
特色功能高拋低吸線副圖指標源碼 瀏覽:71