1. java中定時自動完成任務的實現
JAVA中定時自動完成任務的實現要用到JAVA中的定時器TimerTask和監聽器 聽起來貌似有點困難但是實現起來還是比較容易的!紙老虎~~!
下面的列子很詳細 是關於定時向伺服器上傳(也可以是其他的動作這是看需要關於上傳我博客有寫過可以參考)文件的列子簡單的 步就可以實現
首先創建動作bean
package sun time ;
public class UploadFile{
/**
*實現上傳的代碼s省略 可以看下我下面的 篇日誌
__haiming/blog/static/ / 使用 *** arupload 實現上傳下載[有例子]
__haiming/blog/static/ / 使用Struts 多文件上傳
*/
public void upload()
{
System out println( 系統自動的上傳文件了 );
}
}
創建定時器MyTaker並完成相應的功能
package sun time ;
import java util Calendar;
import java util TimerTask;
import javax servlet ServletContext;
public class MyTaker extends TimerTask {
private static boolean isRun = false;
private ServletContext context ;
private Calendar ca = Calendar getInstance();
public MyTaker(ServletContext context)
{
ntext = context;
}
@Override
public void run() {
if(!isRun){
if( ==ca get(Calendar MINUTE)){
isRun = true;
context log( 正在執行所載入的任務 );
UploadFile uf= new UploadFile();
uf upload();
isRun =false;
context log( 任務順利完成 );
}
}
else
{
System out println( 任務還沒有執行完畢 );
}
}
}
創建監聽器ContextListener
package sun time ;
import javax servlet ServletContextEvent;
import javax servlet ServletContextListener;
import sun time MyTaker;
import java util *;
public class ContexListener implements ServletContextListener{
private Timer timer = null;
@Override
public void contextDestroyed(ServletContextEvent event) {
timer cancel();
event getServletContext() log( 任務列表已經銷毀了 );
}
@Override
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event getServletContext() log( 伺服器已經啟動了 );
timer schele(new MyTaker(event getServletContext()) );///每隔多長時間檢查掃描一次
event getServletContext() log( 已經載入了任務的列表 );
}
}
最後一步就是在web xml中配置監聽
<! Java定時器 >
<listener>
<listener class> sun time ContexListener</listener class>
lishixin/Article/program/Java/hx/201311/26450
2. JAVA定時執行任務,每天定時幾點鍾執行任務
案例: 你想讓他幾點執行都ok
1.MyJob02
//首先我們需要定義一個任務類,比如為MyJob02 ,
//該類需要繼承Job類,然後添加execute(JobExecutionContext context)方法,在
//這個方法中就是我們具體的任務執行的地方。
//由希望由調度程序執行的組件實現的介面
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 執行響應的任務.
System.out.println("HelloJob.execute,"+new Date());
}
2.
public static void main(String[] args) throws Exception {
//SchelerFactory 是一個介面,用於Scheler的創建和管理
SchelerFactory factory = new StdSchelerFactory();
//從工廠裡面拿到一個scheler實例
//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
//與調度程序交互的主要API
/*
* Scheler的生命期,從SchelerFactory創建它時開始,
到Scheler調用shutdown()方法時結束;Scheler被創建後,
可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
(如暫停Trigger)。但是,Scheler只有在調用start()方法後,
才會真正地觸發trigger(即執行job)
*/
Scheler scheler = factory.getScheler();
//具體任務.
//用於定義作業的實例
//JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即觸發器) - 定義執行給定作業的計劃的組件
//TriggerBuilder - 用於定義/構建觸發器實例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();
}
3. java消息定時推送怎麼實現
定時任務實現的幾種方式:4. java中怎麼實現定時功能
我們可以使用Timer和TimerTask類在java中實現定時任務,詳細說明如下:
1、基礎知識
java.util.Timer
一種線程設施,用於安排以後在後台線程中執行的任務。可安排任務執行一次,或者定期重復執行。此類是線程安全的:多個線程可以共享單個 Timer 對象而無需進行外部同步。
java.util.TimerTask
由 Timer 安排為一次執行或重復執行的任務。
2、示例代碼
該示例實現這樣一個功能,在系統運行期間,每30分鍾,系統自動檢查連接池中的可用連接數,並輸出到日誌中。
首先創建一個需要定時執行的任務類,這個任務類需要繼承TimerTask,然後重寫run()方法,run()方法體中的代碼就是定時需要執行的操作,在本demo中,就是獲取連接池中當前可用連接數,並輸出到日誌中,具體實現代碼如下:
public class TaskAvailableConnectNumber extends TimerTask {
private Logger log = Logger.getLogger(TaskAvailableConnectNumber.class);
private ConnectionPool pool=ConnectionPool.getInstance();
@Override
publicvoid run() {
log.debug("當前連接池中可用連接數"+pool.getAvailableConnectNumber());
}
}
下面定義一個監聽器,負責在應用伺服器啟動時打開定時器,監聽器需要實現ServletContextListener介面,並重寫其中的contextInitialized()和contextDestroyed()方法,代碼如下:
public class OnLineListener implements ServletContextListener{
private Logger log = Logger.getLogger(OnLineListener.class);
Timer timer = null;
//在應用伺服器啟動時,會執行該方法
publicvoid contextInitialized(ServletContextEvent arg0) {
//創建一個定時器,用於安排需要定時執行的任務。
timer = new Timer();
//為定時器安排需要定時執行的任務,該任務就是前面創建的任務類TaskAvailableConnectNumber,並指定該任務每30分鍾執行一次。
timer.schele(new TaskAvailableConnectNumber(), 0, 30*60*1000);
log.debug("啟動定時器");
}
//應用伺服器關閉時,會執行該方法,完成關閉定時器的操作。
public void contextDestroyed(ServletContextEvent arg0) {
if(timer!=null){
timer.cancel();//關閉定時器
log.debug("-----定時器銷毀--------");
}
}
}
監聽器要想正常運行,需要在web.xml文件中進行配置,配置信息如下:
<!-- 監聽器配置開始 -->
<listener>
<listener-class>
cn.sdfi.listen.OnLineListener
</listener-class>
</listener>
<!-- 監聽器配置結束 -->
以上步驟完成後,一個簡單的定時器就算開發完成了。
5. java瀹氭椂浠誨姟娌″嶮鍒嗛挓鎵ц屼竴嬈,鎴愬姛灝變笉鎵ц屼簡
棰樹富闂鐨勬槸java瀹氭椂浠誨姟娌″嶮鍒嗛挓鎵ц屼竴嬈,鎴愬姛灝變笉鎵ц屼簡鏄浠涔堝師鍥狅紵鏄緋葷粺鏁呴殰鐨勯棶棰樸
java瀹氭椂浠誨姟娌″嶮鍒嗛挓鎵ц屼竴嬈★紝鎴愬姛灝變笉鎵ц屼簡鏄緋葷粺鏁呴殰鐨勯棶棰橈紝涓昏佹槸浠誨姟鏈澶栭潰娌℃湁鐢╰ry-catch 鎹曟崏錛屾垨鑰呮槸浠誨姟鎵ц屾椂錛岄亣鍒頒簡Uncaught Exception錛屽艱嚧榪欎釜瀹氭椂浠誨姟鍋滄㈡墽琛屼簡銆
java鏄涓縐嶈$畻鏈虹紪紼嬭璦錛屾嫢鏈夎法騫沖彴錛岄潰鍚戝硅薄錛屾硾鍨嬬紪紼嬬殑鐗規э紝騫挎硾搴旂敤浜庝紒涓氱駭Web搴旂敤寮鍙戝拰縐誨姩搴旂敤寮鍙戱紝浠昏亴浜庡お闃沖井緋葷粺鐨勮┕濮嗘柉路楂樻柉鏋楃瓑浜轟簬1990騫翠唬鍒濆紑鍙慗ava璇璦鐨勯洀褰錛屾渶鍒濊鍛藉悕涓篛ak錛岀洰鏍囪劇疆鍦ㄥ剁敤鐢靛櫒絳夊皬鍨嬬郴緇熺殑紼嬪簭璇璦銆
6. java 怎麼寫定時任務
如果要執行一些簡單的定時器任務,無須做復雜的控制,也無須保存狀態,那麼可以考慮使用JDK 入門級的定期器Timer來執行重復任務。
一、原理
JDK中,定時器任務的執行需要兩個基本的類:
java.util.Timer;
java.util.TimerTask;
要運行一個定時任務,最基本的步驟如下:
1、建立一個要執行的任務TimerTask。
2、創建一個Timer實例,通過Timer提供的schele()方法,將 TimerTask加入到定時器Timer中,同時設置執行的規則即可。
當程序執行了Timer初始化代碼後,Timer定時任務就會按照設置去執行。
Timer中的schele()方法是有多種重載格式的,以適應不同的情況。該方法的格式如下:
void schele(TimerTask task, Date time)
安排在指定的時間執行指定的任務。
void schele(TimerTask task, Date firstTime, long period)
安排指定的任務在指定的時間開始進行重復的固定延遲執行。
void schele(TimerTask task, long delay)
安排在指定延遲後執行指定的任務。
void schele(TimerTask task, long delay, long period)
安排指定的任務從指定的延遲後開始進行重復的固定延遲執行。
Timer是線程安全的,此類可擴展到大量同時安排的任務(存在數千個都沒有問題)。其所有構造方法都啟動計時器線程。可以調用cancel() 終止此計時器,丟棄所有當前已安排的任務。purge()從此計時器的任務隊列中移除所有已取消的任務。此類不提供實時保證:它使用 Object.wait(long) 方法來安排任務。
TimerTask是一個抽象類,由 Timer 安排為一次執行或重復執行的任務。它有一個抽象方法run()----計時器任務要執行的操作。因此,每個具體的任務類都必須繼承TimerTask類,並且重寫run()方法。另外它還有兩個非抽象的方法:
boolean cancel()
取消此計時器任務。
long scheledExecutionTime()
返回此任務最近實際 執行的安排 執行時間。
二、例子
下面用Timer實現一個簡單例子:
package stu.timer;
import java.util.Date;
import java.util.TimerTask;
/**
* 重復執行的任務
*
* @author leimin,2008-10-9 9:20:20
*/
public class TestTimerTask extends TimerTask {
/**
* 此計時器任務要執行的操作。
*/
public void run() {
Date executeTime = new Date(this.scheledExecutionTime());
System.out.println("本次任務執行的時間是" + executeTime);
}
}
package stu.timer;
import java.util.Timer;
import java.util.TimerTask;
/**
* 測試JDK Timer的執行
*
* @author leimin,2008-10-9 9:24:35
*/
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schele(task, 500L, 1000L);
}
}
運行結果:
本次任務執行的時間是Thu Oct 09 09:47:57 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:58 CST 2008
本次任務執行的時間是Thu Oct 09 09:47:59 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:00 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:01 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:02 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:03 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:04 CST 2008
本次任務執行的時間是Thu Oct 09 09:48:05 CST 2008
......
7. Java涓璗imer瀹氭椂鍣ㄦ槸鎬庝箞瀹炵幇鐨勶紵
娣卞叆鎺㈢儲Java涓鐨勫畾鏃跺櫒欖旀硶錛氭彮縐樺備綍瀹炵幇姣忔棩瀹氭椂浠誨姟
鍦↗ava鐨勪笘鐣岄噷錛屽畾鏃跺櫒濡傚悓欖旀硶鑸綺懼噯錛岃兘紜淇濇垜浠鐨勭▼搴忓湪鐗瑰畾鏃跺埢鎵ц屽叧閿浠誨姟銆傚挨鍏舵槸褰撴垜浠瑕佷負搴旂敤紼嬪簭璁捐′竴涓姣忔棩娓呯悊涓存椂鏂囦歡鐨勪換鍔℃椂錛孞ava.util.Timer鎻愪緵浜嗗己澶х殑宸ュ叿銆備笅闈錛屾垜浠灝嗕竴姝ユュ墫鏋愯繖涓瀹氭椂鍣ㄧ殑宸ヤ綔鍘熺悊錛屼粠鍒涘緩浠誨姟鍒伴厤緗鐩戝惉鍣錛岃╀綘瀵硅繖涓鏈哄埗鏈夋洿娣卞叆鐨勭悊瑙c
棣栧厛錛孞ava鐨凾imer鏄涓涓寮哄ぇ鐨勫伐鍏鳳紝瀹冨厑璁告垜浠璁懼畾闂撮殧鏃墮棿鎵ц岄勫厛緙栨帓鐨勪換鍔★紝榪欓氳繃TimerTask綾誨疄鐜般備緥濡傦紝濡傛灉鎴戜滑鎯蟲瘡鏅22鐐規墽琛屾煇涓娓呯悊鎿嶄綔錛屽彲浠ヨ繖鏍峰啓錛歚timer.schele(TimerTask, 0, 60 * 60 * 1000 * 22);` 榪欓噷錛0琛ㄧず涓嶇瓑寰呯珛鍗蟲墽琛岋紝60 * 60 * 1000 * 22鍒欐槸22灝忔椂鐨勬縐掓暟銆
涓轟簡紜淇濆畾鏃跺櫒鍦╓eb搴旂敤鍚鍔ㄦ椂鍚鍔ㄥ苟鎸佺畫鍒板簲鐢ㄧ敓鍛藉懆鏈燂紝鎴戜滑闇瑕佸皢瀹冧笌Servlet鐨勭洃鍚鍣ㄧ粨鍚堛侰ontextListener綾誨氨鎵婕斾簡榪欎釜瑙掕壊錛屽畠浼氬湪搴旂敤鍒濆嬪寲鏃惰嚜鍔ㄥ姞杞姐傞厤緗鏂囦歡涓錛屽彧闇娣誨姞濡備笅鐩戝惉鍣ㄥ畾涔夛細
```xml
com.sxl.ContextListener
```
ContextListener綾葷殑鏍稿績鍦ㄤ簬鍒濆嬪寲瀹氭椂鍣ㄥ苟璁劇疆浠誨姟銆傚綋搴旂敤鍚鍔ㄦ椂錛屽畠浼氬壋寤轟竴涓鏂扮殑Timer瀹炰緥錛岀劧鍚庢牴鎹闇奼傚畾鍒朵換鍔℃墽琛屾椂闂達紝濡傛瘡澶╁噷鏅1鐐癸紙Calendar calendar = ...; calendar.set(...);錛夈傛帴鐫錛屽皢DelFileTask錛堜竴涓瀹炵幇浜員imerTask鐨勭被錛夊姞鍏ュ埌瀹氭椂鍣ㄧ殑浠誨姟璋冨害琛ㄤ腑錛屾寚瀹氭瘡24灝忔椂鎵ц屼竴嬈°
```java
timer.schele(new DelFileTask(arg0.getServletContext()), date, period);
```
DelFileTask綾葷殑涓昏佸伐浣滄槸鍦╮un鏂規硶涓鎵ц屾竻鐞嗕復鏃舵枃浠剁殑鎿嶄綔錛屽悓鏃舵帶鍒朵換鍔℃槸鍚﹀凡鎵ц屻傚綋浠誨姟鎵ц屽畬姣曪紝瀹冧細鏍囪頒換鍔$姸鎬佷負宸插畬鎴愶紝閬垮厤閲嶅嶆墽琛屻
鑷蟲わ紝浣犲凡緇忔帉鎻′簡Java瀹氭椂鍣ㄧ殑鍩烘湰鏋勫緩鍜屽簲鐢ㄣ備絾鍒蹇樹簡錛岃繖鍙鏄涓涓鍩虹妯℃澘錛屽疄闄呴」鐩涓鍙鑳介渶瑕佹牴鎹鍏蜂綋闇奼傝皟鏁翠換鍔$被錛圖elFileTask錛夊拰鐩戝惉鍣錛圕ontextListener錛夛紝姣斿傛坊鍔犳棩蹇椼侀敊璇澶勭悊鎴栬呬紭鍖栨墽琛岄昏緫銆
閫氳繃榪欐℃繁鍏ョ殑鎺㈢儲錛屼綘涓嶄粎浜嗚В浜咼ava Timer鐨勫疄鐜幫紝榪樺︿細浜嗗備綍灝嗗叾宸у欏湴鋙嶅叆鍒版棩甯哥殑寮鍙戞祦紼嬩腑銆傜幇鍦錛屼綘鍙浠ュ紑濮嬪湪浣犵殑欏圭洰涓澶у睍韜鎵嬶紝涓轟綘鐨勫簲鐢ㄧ▼搴忓炴坊鏅鴻兘鍖栫殑瀹氭椂鍔熻兘浜嗐
8. 在Java中如何設置一個定時任務,在每天的一個時間點自動執行一個特定的程序具體代碼怎麼寫代碼全點
Quartz定時機制
首先導入jar包到程序內 quartz-all-1.6.0.jar
然後創建一個XML
TimeConfig.xml 名字可以自己定義
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="mainTask" class="net.timed.MainTask"/> //你要執行的任務類
//jar類
<bean id="mainJob" class="org.springframework.scheling.quartz.">
<property name="targetObject">
<ref bean="mainTask"/>//將你的類添加到定時器當中
</property>
<property name="targetMethod">
<value>execute</value> //定時執行類裡面的哪個方法
</property>
</bean>
<bean id="timeTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mainJob"/>
</property>
<!--
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 12 ? * WED 表示每個星期三中午12點
"0 0 12 * * ?" 每天中午12點觸發
"0 15 10 ? * *" 每天上午10:15觸發
"0 15 10 * * ?" 每天上午10:15觸發
"0 15 10 * * ? *" 每天上午10:15觸發
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發
"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鍾觸發
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鍾觸發
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鍾觸發
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鍾觸發
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發
"0 15 10 15 * ?" 每月15日上午10:15觸發
"0 15 10 L * ?" 每月最後一日的上午10:15觸發
"0 15 10 ? * 6L" 每月的最後一個星期五上午10:15觸發
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最後一個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
上面這個是quartz的語法 定時單位
-->
<property name="cronExpression">
<value>0 0/5 * * * ?</value> //定時的語法
</property>
</bean>
<bean id="sfb" class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref local="timeTrigger"/>
</list>
</property>
</bean>
</beans>
//下面這個類就是我在XML中引入的類
package net.timed;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainTask {
public void execute() throws IOException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("do my job"+dateFormat.format(new Date()));
Runtime.getRuntime().exec("cmd /c start E:/mbl/BusinessOffice/MoneDB/bin/bakup.bat");
}
}
然後在web.xml中把這個TimeConfig.xml添加進去作為監聽
系統啟動的時候自動就監聽這個事件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
/WEB-INF/TimerConfig.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
這個是quartz spring的定時機制 請仔細的看看 如果可以請給分哦
9. java怎麼讓程序每天晚上12點做定時任務,因為程序是不定時開的,所以要實時監聽系統時間。
java定時任務,每天定時執行任務(JDK TimerTask)
標簽: taskTasktimerTimer
2013-01-14 13:28 8747人閱讀 評論(0) 收藏 舉報
01 public class TimerManager {
02
03 //時間間隔
04 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
05
06 public TimerManager() {
07 Calendar calendar = Calendar.getInstance();
08
09 /*** 定製每日2:00執行方法 ***/
10
11 calendar.set(Calendar.HOUR_OF_DAY, 2);
12 calendar.set(Calendar.MINUTE, 0);
13 calendar.set(Calendar.SECOND, 0);
14
15 Date date=calendar.getTime(); //第一次執行定時任務的時間
16
17 //如果第一次執行定時任務的時間 小於 當前的時間
18 //此時要在 第一次執行定時任務的時間 加一天,以便此任務在下個時間點執行。如果不加一天,任務會立即執行。
19 if (date.before(new Date())) {
20 date = this.addDay(date, 1);
21 }
22
23 Timer timer = new Timer();
24
25 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
26 //安排指定的任務在指定的時間開始進行重復的固定延遲執行。
27 timer.schele(task,date,PERIOD_DAY);
28 }
29
30 // 增加或減少天數
31 public Date addDay(Date date, int num) {
32 Calendar startDT = Calendar.getInstance();
33 startDT.setTime(date);
34 startDT.add(Calendar.DAY_OF_MONTH, num);
35 return startDT.getTime();
36 }
37
38 }
在 TimerManager 這個類裡面,大家一定要注意 時間點的問題。如果你設定在凌晨2點執行任務。但你是在2點以後
發布的程序或是重啟過服務,那這樣的情況下,任務會立即執行,而不是等到第二天的凌晨2點執行。為了,避免這種情況
發生,只能判斷一下,如果發布或重啟服務的時間晚於定時執行任務的時間,就在此基礎上加一天。
01 public class NFDFlightDataTimerTask extends TimerTask {
02
03 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
04
05 @Override
06 public void run() {
07 try {
08 //在這里寫你要執行的內容
09
10 } catch (Exception e) {
11 log.info("-------------解析信息發生異常--------------");
12 }
13 }
14 }
15
16 public class NFDFlightDataTaskListener implements ServletContextListener {
17
18 public void contextInitialized(ServletContextEvent event) {
19 new TimerManager();
20 }
21
22 public void contextDestroyed(ServletContextEvent event) {
23 }
24
25 }
然後要在web.xml裡面配置監聽器
1 <listener>
2 <listener-class>
3 com.listener.NFDFlightDataTaskListener
4 </listener-class>
5 </listener>