2 Star 1 Fork 1

Don Corleone / 实验三:全球新型冠状病毒实时数据统计应用程序的设计与实现

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

实验三:全球新型冠状病毒实时数据统计应用程序的设计与实现

一、实验目的

1、掌握使用Spring框架自带的RestTemplate工具类爬取网络数据;

2、掌握使用Spring框架自带的计划任务功能;

3、掌握使用Apache Commons CSV组件解释CSV文件;

4、掌握Java 8的Stream API处理集合类型数据;

5、了解使用模板引擎或前端框架展示数据。

二、实验环境

1、JDK 1.8或更高版本

2、Maven 3.6+

3、IntelliJ IDEA

4、commons-csv 1.8+

三、实验任务

1、通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目。

2、添加功能模块:spring MVC、lombok、commons-csv等。

    推荐使用commons-csv组件处理csv文件:

    Apache Commons CSV 官方用户指南:


答:

3、爬取全球冠状病毒实时统计数据。(Java,Spring)

    在Github上,有一个由约翰·霍普金斯大学系统科学与工程中心(JHU CSSE)运营的2020年新型冠状病毒可视化仪表板的数据仓库,大家可以从该仓库中爬取全球新型冠状病毒最新的统计数据。
    Github仓库地址
    该仓库会把全球新型冠状病毒最新的统计数据汇总到一个csv文件上,大家在爬取数据时,获取这个csv文件即可.
    Github仓库的csv文件地址
    由于国内网络访问限制的原因,我们不能正常访问Github。老师已经克隆整个仓库,并上传到Gitee,方便大家进行实验.
    克隆的Gitee仓库地址
    克隆的Gitee仓库的csv文件地址

4、使用Spring框架自带的RestTemplate工具类爬取数据。

    RestTemplate采用同步方式执行 HTTP 请求的类,底层使用 JDK 原生 HttpURLConnection API ,或者 HttpComponents等其他 HTTP 客户端请求类库。
    RestTemplate 工具类提供模板化的方法让开发者能更简单地发送 HTTP 请求。
    RestTemplate 就是 Spring框架 封装的处理同步 HTTP 请求的工具类。
    RestTemplate 官方使用指南

    另外,大家可以用 WebClient

    在本实验中,我们可以使用 RestTemplate 工具类获取上述的csv文件。
    如果直接使用HTTP客户端请求Gitee上的文件,会报403的错误,但使用浏览器访问是正常的。经过分析,我们使用HTTP客户端请求Gitee上的文件时,需要设置一个请求头部User-Agent,否则会报403异常。

    当我们使用 RestTemplate 工具类时,可以如下图所示设置请求头部并请求数据:
    如上图所示,我们先实例化一个RequestEntity对象,再通过RestTemplate的exchange方法获取csv文件,这个文件的数据会封装到一个Resource对象中。我们可以通过Resource对象的getInputStream方法获取csv文件的输入流。


答:

5、分析csv文件的数据结构,定义model类。

    如下图所示,这是一个model类的样例:


答:

6、使用Apache Commons CSV组件解释CSV文件。

    CSV文件WIKI
    CSV文件是由任意数目的记录组成的,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。CSV文件是以纯文本形式存储表格数据(数字和文本)。
    为了方便应用程序处理,我们通常会把csv文件的每条记录转换为一个modle类的对象,即上一步中我们定义的model类。
    把所有的model类的对象组织为一个集合,如:List 。最终,这个csv文件会转换为一个List对象。然后我们可以根据实际的业务逻辑,访问这个List即可。
    我们可以定义一个Service组件处理csv文件的转换逻辑,并把最终转换后的List对象赋值给这个Service组件的成员属性,以便应用程序访问这个List对象。
    使用Apache Commons CSV组件,我们可以很方便地解释CSV文件,详细使用方法可以浏览官方的用户指南
    提示:
      record.get("Province/State") 可以获取记录某个字段名的值;
      record.get("11/8/20") 可以获取某个地区的指定时间的病毒数值。
      record.get(record.size() - 1) 可以获取记录最后一个字段的值。

答:

7、使用Spring框架自带的计划任务功能定时更新统计数据。

    Scheduling Tasks计划任务官方使用指南
    要实现计划任务,首先通过在配置类上添加 @EnableScheduling 注解来开启对计划任务的支持,然后在要执行计划任务的方法上注解 @Scheduled,声明这是一个计划任务。     其中 @Scheduled 注解中有以下几个参数:     1、cron:cron表示式,指定任务在特定时间执行;     2、fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型这long,单位ms;
    3、fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
    4、fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;
    5、fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
    6、initialDelay:表示延迟多久后再第一次執行任務,参数类型为long,單位ms;
    7、initialDelayString:与initialDelay的含义一样,只是参数类型变为String;
    8、zone:时区,默认为当前时区,一般不需要设置。
    如下图所示,例子中配置了每天凌晨1点执行定时任务,更新统计数据:

    另外,可以在cron参数中使用${...}占位符,读取属性文件中的自定义属性配置cron参数,如下图所示:
    在属性文件中自定义属性配置cron表达式,如下图所示:
    *当cron="-"时,表示关闭计划任务。*

    **注意:**在Spring Boot应用程序中,Spring框架自带的计划任务默认是在单线程中执行的,这是因为Spring Boot在初始化计划任务线程池的时候,默认的线程池大小是 1 ,也就是说只有一个线程来执行所有计划任务,那么当有一个计划任务要耗费很长时间执行时,其它的计划任务即使到了执行时间点也只能继续等待。
    我们可以通过属性文件设置计划任务线程池的大小,实现并行执行计划任务,如下图所示:

    推荐大家阅读关于计划任务功能的Spring Boot自动配置类,如下图所示:


答:

8、要确保应用程序启动时,获取一次统计数据。

    提示:
      1、InitializingBean;
      2、@PostConstruct;
      3、CommandLineRunner。

答:

9、单元测试。

    必须编写单元测试。
    所有控制器 与 Service 组件,必须写单元测试用例进行测试。
    如下图所示,例子中演示了如何对一个Service组件进行单元测试。

    提示:掌握如何配置@SpringBootTest注解的属性,从而构造一个精简的单元测试环境。


答:

10、定义Cotroller控制器。

    我们需要定义一个控制器,用于返回数据给前端展示。
    控制器必须支持查询功能。如:可以选择查询某个地区或国家的新型冠状病毒实时统计数据
    提示:
    1、 使用Java 8的Stream API可以很方便地访问集合类型对象,如:List ;
    2、 parallelStream支持并行流,可以大大提升访问性能;
    3、 filter方法支持设置过滤条件;
    4、 Collectors.toUnmodifiableList()收集为不可变的List集合。

答:

11、定义前端数据展示页面。

    可以使用 任何视图引擎 或 任何前端框架 构建前端数据展示。
    要求:界面美观、整洁,支持查询功能。如果页面包含图表展示功能,加15分。

答:

         全球疫情:          选定国家:

四、实验要求

1、实验项目push到自己个人的码云的公开/私有仓库,并把仓库网址登记在在线文档

2、从码云仓库下载项目的ZIP文件,并交由班长汇总

3、撰写实验报告,完成各个实验任务。各实验任务中的附图,是老师的演示代码,同学们应该模仿演示代码改为自己的代码。实验报告中必须完整描述各实验任务实现过程并附截图

4、网络空间安全学院实验报告模板(2019试行)

5、实验三项目仓库登记表

6、严禁抄袭。如果不想项目仓库给别人看到,可以设置为私有仓库,并把老师的码云账号(dgsai@vip.qq.com)加入到仓库开发者以便老师检查

空文件

简介

暂无描述 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/Kim_zhihua/springboot-experiment3.git
git@gitee.com:Kim_zhihua/springboot-experiment3.git
Kim_zhihua
springboot-experiment3
实验三:全球新型冠状病毒实时数据统计应用程序的设计与实现
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891