博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Cloud学习笔记9——天气预报系统微服务(3)天气数据 API 微服务
阅读量:3941 次
发布时间:2019-05-24

本文共 3060 字,大约阅读时间需要 10 分钟。

开发环境

  • JDK8+
  • Gradle4+
  • Redis 3.2.100
  • Apache HttpClient 4.5.3
  • Spring Boot Web Starter
  • Spring Boot Data Redis Starter

创建项目

新建项目文件夹:

在这里插入图片描述
micro-weather-report项目中的源码文件复制粘贴到新项目文件夹中:
在这里插入图片描述

修改源码

修改build.gradle配置,删除HttpClientquartzthymeleaf的依赖:

//依赖关系dependencies {
//该依赖用于编译阶段 compile('org.springframework.boot:spring-boot-starter-web') //Redis compile('org.springframework.boot:spring-boot-starter-data-redis') //该依赖用于测试阶段 testCompile('org.springframework.boot:spring-boot-starter-test')}

修改com.study.spring.cloud.weather.service包下的WeatherDataService类:

package com.study.spring.cloud.weather.service;import com.study.spring.cloud.weather.vo.WeatherResponse;public interface WeatherDataService {
//根据城市ID查询天气数据 WeatherResponse getDataByCityId(String cityId); //根据城市名称查询天气数据 WeatherResponse getDataByCityName(String cityName); }

修改com.study.spring.cloud.weather.service包下的WeatherDataServiceImpl类:

package com.study.spring.cloud.weather.service;import com.fasterxml.jackson.databind.ObjectMapper;import com.study.spring.cloud.weather.vo.WeatherResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.core.ValueOperations;import org.springframework.stereotype.Service;import java.io.IOException;@Servicepublic class WeatherDataServiceImpl implements WeatherDataService {
//在应用中添加日志 private final static Logger logger=LoggerFactory.getLogger(WeatherDataService.class); private static final String WEATHER_URI="http://wthrcdn.etouch.cn/weather_mini?"; @Autowired //对redis api的封装 private StringRedisTemplate stringRedisTemplate; @Override public WeatherResponse getDataByCityId(String cityId) {
String uri=WEATHER_URI + "citykey=" + cityId; return this.doGetWeather(uri); } @Override public WeatherResponse getDataByCityName(String cityName) {
String uri=WEATHER_URI + "city=" + cityName; return this.doGetWeather(uri); } private WeatherResponse doGetWeather(String uri) {
String key=uri; String strBody=null; ObjectMapper mapper=new ObjectMapper(); WeatherResponse resp=null; //ValueOperations类可通过get()获取缓存中的数据 ValueOperations
ops = stringRedisTemplate.opsForValue(); //先查缓存,缓存有的取缓存中的数据 if(stringRedisTemplate.hasKey(key)){
logger.info("Redis has data"); strBody = ops.get(key); }else{
logger.info("Redis doesn't have data"); //缓存没有,抛出异常 throw new RuntimeException("Doesn't have data!"); } //用json反序列化成我们想要的数据 try {
/* * strBody:要解析的参数内容,从respString获取 * WeatherResponse.class:要转成的对象类型 */ resp=mapper.readValue(strBody,WeatherResponse.class); }catch(IOException e) {
logger.error("Error!",e); } return resp; }}

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前端目录下:

在这里插入图片描述
修改application.properties配置文件,将

#热部署静态文件spring.thymeleaf.cache=false

内容删除

此时src目录结构如下:

在这里插入图片描述

运行

注意一定要先运行Redis

运行应用:

在这里插入图片描述
运行结果如下:
在这里插入图片描述
访问http://localhost:8080/weather/cityId/101020100页面:
在这里插入图片描述
如果页面显示Doesn't have data!,可能是由于天气数据采集微服务的同步服务器再redis中的缓存超过了之前设置的半小时,数据被删除掉了,此时要先运行天气数据采集微服务,再运行天气数据API微服务,就可以了

转载地址:http://tgiwi.baihongyu.com/

你可能感兴趣的文章
mtk camera isp
查看>>
j2me 扑克发牌算法实现
查看>>
J2ME贪吃蛇源代码——200行左右,包含详细注释
查看>>
J2ME游戏源代码免费下载——国外Digiment公司商业化代码
查看>>
手机银行技术应用探讨
查看>>
角色扮演游戏引擎的设计原理
查看>>
j2me开发FAQ整理
查看>>
J2ME程序开发新手入门九大要点
查看>>
双向搜索算法
查看>>
日本GAME製作方式
查看>>
移动行业术语资料
查看>>
3G到来将全面颠覆SP、CP游戏规则
查看>>
射击游戏中跟踪弹及小角度移动的开发
查看>>
完美的软件项目开发团队结构
查看>>
数学的重要性
查看>>
how Google routed around Sun’s IP-based licensing restrictions on Java ME
查看>>
JAVA面试题最全集
查看>>
JAVA面试题集
查看>>
Embedded System Interview Questions:
查看>>
The Standalone Programmer:Tips from the trenches
查看>>