摘要:  觀察者模式,定義對(duì)象之間的一種一對(duì)多的依賴關(guān)系,當(dāng)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并且被自動(dòng)更新。觀察者模式在JDK中有現(xiàn)成的實(shí)現(xiàn),java.util.Obserable。

  首先說下需求:通過ftp上傳約定格式的文件到服務(wù)器指定目錄下,應(yīng)用程序能實(shí)時(shí)監(jiān)控該目錄下文件變化,如果上傳的文件格式符合要求,將將按照每一行讀取解析再寫入到數(shù)據(jù)庫,解析完之后再將文件改名。(這個(gè)是原先已經(jīng)實(shí)現(xiàn)了的功能,請(qǐng)看我的一篇文章java利用WatchService實(shí)時(shí)監(jiān)控某個(gè)目錄下的文件變化并按行解析(注:附源代碼)

但項(xiàng)目上線一段時(shí)間后,發(fā)現(xiàn)再利用FileZilla登陸上傳文件,文件不能被解析,而重啟tomcat之后再上傳,又能解析,于是判定是監(jiān)控指定目錄的那個(gè)線程掛掉了,導(dǎo)致上傳后的文件不能被檢測(cè)到,故也不能被解析。之后查看日志也最終驗(yàn)證了我推斷。

  所以關(guān)鍵的問題就是:如何監(jiān)聽線程,當(dāng)意外退出線程后進(jìn)行自動(dòng)重啟,這也是本文所要利用觀察者模式實(shí)現(xiàn)的。

下面請(qǐng)看實(shí)現(xiàn)過程(尤其見紅色注解部分):

  1、web.xml監(jiān)聽器配置文件監(jiān)控監(jiān)聽器,初始化創(chuàng)建一個(gè)監(jiān)控指定目錄的線程  

移動(dòng)開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機(jī)開發(fā)培訓(xùn),手機(jī)維修培訓(xùn),手機(jī)軟件培訓(xùn)

<?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">

 
        
		

網(wǎng)友評(píng)論