# SpringBootClass3 **Repository Path**: li_tiger_admin/SpringBootClass3 ## Basic Information - **Project Name**: SpringBootClass3 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-05-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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、thymeleaf等。 ``` org.apache.commons commons-csv 1.8 ``` ``` org.springframework.boot spring-boot-starter-thymeleaf ``` 3. 分析csv文件的数据结构,定义pojo类,用于存放病毒数据。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0510/231924_370f1c02_4853686.png "屏幕截图.png") 4. 使用Spring框架自带的RestTemplate工具类爬取全球冠状病毒实时统计数据。注意:需要设置user-agent; ![输入图片说明](https://images.gitee.com/uploads/images/2020/0510/230921_dd97491f_4853686.png "屏幕截图.png") 5. 使用Apache Commons CSV组件解释,将爬取的数据存放在List中。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0510/231343_d26181d4_4853686.png "屏幕截图.png") 6. 使用Spring框架自带的计划任务功能定时更新统计数据。     要实现计划任务,首先通过在配置类上添加 @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:时区,默认为当前时区,一般不需要设置。 如下图所示,例子中配置了每天凌晨2点执行定时任务,更新统计数据: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/085311_3fbce7bf_4853686.png "屏幕截图.png") 7. 要确保应用程序启动时,获取一次统计数据. 有多种方法,这里使用InitializingBean。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/085612_ee76b4d6_4853686.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/085649_40eab559_4853686.png "屏幕截图.png") 8. 写一个单元测试。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/085919_9728f4d0_4853686.png "屏幕截图.png") 运行结果 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/090119_67a5d699_4853686.png "屏幕截图.png") 9. 定义Controller控制层; 定义允许带参数的@RequestMapping,用于选择要展示的国家,将数据通过model返回 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/090345_071c8e6d_4853686.png "屏幕截图.png")     写一个排序算法,对患病人数的国家进行排名; ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/090714_3ba245b1_4853686.png "屏幕截图.png") 10. 定义前端数据展示页面。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/091043_98b12286_4853686.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0512/091211_442973eb_4853686.png "屏幕截图.png")