閱讀200 返回首頁    go 阿裏雲 go 技術社區[雲棲]


經過一周的掙紮,目前天氣預報抓取解析插入數據庫的功能已經大致實現,附項目源碼

 

將中國天氣網近六天(因為有些城市提供的數據源隻有五天數據,所以我暫時取5天,程序裏依然是六天的標準)的天氣情況抓取,用JSON解析,存入數據庫,數據庫是兩張表,城市表和天氣表。程序可以運行,兩個表都能讀入數據,城市表大致讀入了423行數據,天氣表大致讀入了1800行數據。程序的缺點在於,暫時還沒寫注釋,麵向對象還未體現,沒有實現每天定時抓取的性能,需要人工每天手動運行程序抓取數據。。。。。

 

附源碼:

https://download.csdn.net/detail/opzoonzhuzhengke/3860118


剛才實現了一下定時抓取

不貼代碼了,大致看下這個例子,改吧改吧就行了

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Tim {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Timer tt=new Timer();
		TimerTaskMine tk=new TimerTaskMine();
		System.out.println((new Date()).toString());
		tt.schedule(tk, 1000*5, 1000*2);//第一次先等待5秒,以後每隔2秒走一次run方法。
		
//		tt.schedule(tk, 1000*3);//等待3秒,然後隻執行1次。
		
		
	}

}


class TimerTaskMine extends TimerTask{
	int i=0;
	int kkk=0;

	@Override
	public void run() {
		i++;kkk++;
		// TODO Auto-generated method stub
		System.out.println((new Date()).toString()+"--i--"+i+"--kkk--"+kkk);
		try {
			Thread.sleep(1000*4);//這句代碼,把schedule(1,2,3)第3個參數覆蓋掉了,
			//這裏是4秒,即使你在schedule方法中這的是2秒也使用4秒
			
			if(this.i==5){
				this.cancel();
			}
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

Timer類就像一個定時器,用於設置特定的時間或周期,來配合線程動作的執行,但是隻調用Timer無法執行線程動作,必須配合另一個類TimerTask的方法才能使用。從示例6-13中可以發現Timer類與Thread類很相近。

public Timer ()

創建一個新的timer對象。

Timer屬於計時器類,Time建立後,需要調用schedule()方法來執行計劃任務,計劃調度的方法有許多運用方式:

public void schedule (TimerTask task, long delay)

執行任務前先等待一段時間。task代表要執行的任務,delay代表需要等待的時間,單位為毫秒(1000毫秒為1秒)。

 

 

public void schedule (TimerTask task,Date time)

在指定的係統時間time之後開始執行任務。

 

 

public void schedule (TimerTask task,long delay,long period)

延遲一段時間後開始執行任務,任務按照設定的周期執行。傳入的參數:delay為延遲時間,period為周期時間,單位均為毫秒。

 

 

public void schedule(TimerTask task,Date firstTime,long period)

在指定的時間後開始執行任務,任務按照設定的周期執行。傳入的參數:firstTime為指定等待時間,period為周期時間,單位都是毫秒。

 

 

public void scheduleAtFixedRate (TimerTask task,long delay,long period)

執行任務內容後,等待delay時間,再按照period周期時間繼續執行任務,單位都是毫秒。

 

 

public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

先等待一段時間firstTime,再執行計劃任務,然後按照period周期時間繼續執行任務,單位都是毫秒。

 

 

public void cancel()

停止timer計時。

 

有了Timer的各項調用方法,還不能直接執行計劃任務,需要跟TimerTask類共同運用才能使計劃任務開始運行。TimerTask所包含的相關方法如下:

public void TimerTask ()

創建一個新的TimerTask對象。

 

public abstract void run()

運行計劃任務的工作內容。

 

public void cancel()

中止TimerTask類的執行流程,不再執行所調度的工作內容。

 

public void scheduleExcutionTime()

實際運行計劃任務所用的時間。


最後更新:2017-04-02 06:52:12

  上一篇:go MySQL Innodb數據庫性能實踐——VARCHAR vs CHAR
  下一篇:go Linux平台使用二進製包將MySQL 5.1安裝到個人目錄簡易指南