天氣預報系統介紹-天氣預報系統設計
本節通過Spring Boot技術快速實現一個天氣預報系統。
通過這個系統,一方面可以了解Spring Boot的全面用法,為后續創建微服務應用打下基礎;另一方面,該系統會作為本節進行微服務架構改造的非常好的起點。
下面以前面創建的hello-world應用作為基礎進行改造,成為新的應用micro-weather-basic。

為了演示本例,需要采用如下開發環境。
. JDK8。
.Gradle 4.0。
. Spring Boot Web Starter 2.0.0.M4。
Apache HttpClient 4.5.3。
天氣的數據是天氣預報的實現基礎。本應用與實際的天氣數據無關,理論上可以兼容多種數據來源。但為求簡單,我們在網上找了一個免費、可用的天氣數據接口。
- ·天氣數據來源為中華萬年歷。例如以下兩種方式。
通過城市名稱獲得天氣數據: http://wthrcdn.etouch.cn/weather_mini?city=深圳。
通過城市ID獲得天氣數據: http://wthrcdn.etouch.cn/weather_mini?citykey=101280601。
- ·城市ID列表。每個城市都有一個唯一的ID作為標識,見https:/waylau.com/data/citylist.xml。
調用天氣服務接口示例,這里以“深圳”城市為例,可看到如下天氣數據返回。
通過觀察以上數據,來理解每個返回字段的含義。
- “city”:城市名稱。
- "aqi”:空氣指數。
- “wendu”:實時溫度。
- “date”:日期,包含未來5天。
- “high”:最高溫度。
- “low”:最低溫度。
- “fengli”:風力。
- “fengxiang”:風向。
- “type”:天氣類型。
以上數據是需要的天氣數據的核心數據,但是,同時也要關注下面兩個字段。
- “status”:接口調用的返回狀態,返回值“1000”,意味著數據接口正常。
- ·“desc”:接口狀態的描述,“OK”代表接口正常。
重點關注返回值不是“1000”的情況,這說明這個接口調用異常。
初始化一個Spring Boot項目“micro-weather-basic”,該項目可以直接以之前的“hello-world"應用作為基礎進行修改。
添加Apache HttpClient的依賴,來作為Web請求的客戶端。完整的依賴情況如下。
創建com.waylau.spring.cloud.weather.vo包,用于存放相關值對象。這些對象都是POJO對象,沒有復雜的業務邏輯
創建天氣信息類 Weather:
昨日天氣信息類Yesterday :
未來天氣信息類Forecast:
WeatherResponse作為整個消息的返回對象:
創建com.waylau.spring.cloud.weather.service包,用于存放服務接口及其實現。
下面是定義服務的兩個接口方法,一個是根據城市的ID來查詢天氣數據,另一個是根據城市名稱來查詢天氣數據。
其服務實現WeatherDataServiceImpl為:
其中:
. RestTemplate是一個REST客戶端,默認采用Apache HttpClient來實現;
·返回的天氣信息采用了Jackson來進行反序列化,使其成為WeatherResponse對象。
創建com.waylau.spring.cloud.weather.service包,用于存放控制器層代碼。控制器層暴露了RESTful API接口。
其中,@RestController會自動將返回的數據進行序列化,使其成為JSON數據格式。
創建com.waylau.spring.cloud.weather.config包,用于存放配置相關的代碼。創建RestConfiguration
類,該類是RestTemplate 的配置類。
運行項目之后,訪問以下API來進行測試。
- . http://localhost:8080/weather/cityId/101280601。
- http://localhost:8080/weather/cityName/惠州。
能看到如圖6-1所示的天氣API返回的數據。
- 下篇文章給大家介紹使用Redis提升應用的并發訪問能力;
- 覺得文章不錯的朋友可以轉發此文關注小編;
- 感謝大家的支持!!
