天气预报系统介绍-天气预报系统设计
本节通过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提升应用的并发访问能力;
- 觉得文章不错的朋友可以转发此文关注小编;
- 感谢大家的支持!!
