2.SpringBoot简介,天气预报

1.天气预报系统

  1. 数据来源 http://wthrcdn等开放的接口

查看天气

  1. 访问:http://wthrcdn.etouch.cn/weather_mini?citykey=101280601
  2. 访问:http://wthrcdn.etouch.cn/weather_mini?city=杭州
  3. 但是用API工具返回是正常的:http://apizza.cc

  4. 自身访问:http://localhost:8080/weather/cityName/深圳

  5. 自身访问:http://localhost:8080/weather/cityId/101282004

2.使用redis提高响应能力

  1. 及时响应,减少服务调用
  2. 开发环境:JDK9+ ,Apache HttpClient4.5.3,Redis3.2.100,Spring Boot Web Starter,Spring Boot Data Redis Starter
  3. pom添加spring-boot-starter-data-redis
  4. 先取缓存中的数据
    “`aidl
    private WeatherResponse doGetWeahter(String uri) {
    String key = uri;
    String strBody = null;
    ObjectMapper mapper = new ObjectMapper();
    WeatherResponse resp = null;
    ValueOperations
5. 使用了slf4,日志查看
6. 配置redis,也可以用yml格式
```aidl




<div class="se-preview-section-delimiter"></div>

# redis
spring.redis.host=118.178.134.251
spring.redis.port=6380
spring.redis.password=beikbank




<div class="se-preview-section-delimiter"></div>

3.quartz scheduler定时获取天气数据

  1. 我们不是强依赖,用了redis缓存减少依赖,这个动作,现在是用户请求时拉取最新的,需要定时任务
  2. Spring Boot Quartz Starter 和 Quartz Scheduler
  3. 引入:spring-boot-starter-quartz
  4. 定时任务的类:WeatherDataSyncJob extends QuartzJobBean
  5. QuartzConfiguration需要配置:定义两个类JobDetail和Trigger,其中JobDetail中定义了job,job就是实际执行的类,然后trigger该类
@Bean
    public JobDetail weatherDataSyncJobDetail() {
        return JobBuilder.newJob(WeatherDataSyncJob.class).withIdentity("weatherDataSyncJob")
        .storeDurably().build();
    }




<div class="se-preview-section-delimiter"></div>

5.获取城市列表

  1. 新建City这个Bean,使用工具jaxb(java自带的),对应一个xml
  2. 首先这个Bean声明成xml的根元素,导入包javax.xml,这个name,等于xml中的元素名称,尖括号里面的d
  3. 每个字段都声明,@XmlAttribute
  4. 最后还需要一个注解,访问类型XmlAccessorType,访问类型有如FIELD,按字段访问
  5. 光有城市列表不够,还需要CityList的集合,相应注解跟上,注意@Data
  6. 最后CityList还需要转化成Java,创建一个util包,对应工具类
  7. 使用:CityDataService获取城市列表:(1)读取xml文件,(2)xml转换为Java对象,List

  8. 写一个service,把天气数据放在缓存saveWeatherData,然后syncDateByCityId

  9. 写了一个定时任务,定时将天气信息放在redis

6. 给天气预报一个面子-集成thymeleaf

  1. 获取城市ID的天气预报信息:GET/report/cityId/{cityId}
  2. cpoy新建module,引入spring-boot-starter-thymeleaf
  3. http://localhost:8080/report/cityId/101282004

7.给天气预报一个面子-集成bootstrap

  1. 首先需要一个div,囊括所有,div给一个样式container
  2. 最后选择什么城市,就定义什么城市,需要js
$(function(){
    $("#selectCityId").change(function(){
        var cityId = $("#selectCityId").val();
        var url = '/report/cityId/'+ cityId;
        window.location.href = url;
    })
});




<div class="se-preview-section-delimiter"></div>
  • 通过来调用selectCityId,调用js通过src=@{}
<select class="custom-select" id="selectCityId">
    <option th:each="city : ${reportModel.cityList}"
        th:value="${city.cityId}" th:text="${city.cityName}"
        th:selected="${city.cityId eq reportModel.cityId}"></option>
</select>

8.如何将单块架构进化为微服务

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页