# JavaEE3-Experiment3
**Repository Path**: shallowcmz/JavaEE3-Experiment3
## Basic Information
- **Project Name**: JavaEE3-Experiment3
- **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-11
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
实验三
课程名称:企业级开发框架专题
学期:2020春季
|
实验名称 | 全球新型冠状病毒实时数据统计应用程序的设计与实现 | 实验序号 | 三 |
|
姓 名 | 陈铭昭 | 学 号 | 201741404152 | 班 级 | 17软卓1班 |
|
实验地点 | 网上 | 实验日期 | 2020/5/11 | 指导老师 | 黎志雄 |
|
教师评语 | *** | 实验成绩 | 评阅教师 |
| 百分制 | ** |
|
同组同学 | 无 |
# 实验目标
1、 掌握使用Spring框架自带的RestTemplate工具类爬取网络数据;
2、 掌握使用Spring框架自带的计划任务功能;
3、 掌握使用Apache Commons CSV组件解释CSV文件;
4、 掌握Java 8的Stream API处理集合类型数据;
5、 了解使用模板引擎或前端框架展示数据。
# 实验内容(及步骤):
1&2、 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目,并且添加功能模块:spring MVC、lombok、commons-csv等。

3&4、使用Spring框架自带的RestTemplate工具类爬取数据。
如图,先将数据爬取下来,然后保存到virusDataResource中,等待解析

5、 定义model类。
定义一个Model类,方便存储解析后的csv数据:

6、 使用Apache Commons CSV组件解释CSV文件。
先调用Resource类的getInputStream方法得到流,然后转换成字符流并得到缓冲流,加快数据的读取速度,
然后根据withHeader定义的MapKey,将每个record中的数据读出来,并调用Model类的带参构造器,构造一个Model对象,添加到List中,
最终得到一个Model的列表并返回。

7、 使用Spring框架自带的计划任务功能定时更新统计数据。
给类添加@EnableScheduling注解,并且给afterPropertiesSet方法添加@Scheduled注解,corn = "0 0 1 * * *")可以让方法每日凌晨一点运行一次。

设置默认线程数:

8、 要确保应用程序启动时,获取一次统计数据。
这里先让VirusService接口继承了InitializingBean接口

然后,再让SearchServiceImpl实现了VirusService接口

运行后,可以看到应用程序启动时,确实获取了一次统计数据。

9、 单元测试。
SearchServiceImpl的单元测试通过

VirusServiceImpl的单元测试通过

PageController的单元测试通过

10、 定义Cotroller控制器。

11、 定义前端数据展示页面。
访问localhost:8080/index.html:

搜索Canada:

搜索功能的实现:
先调用analysisCSV返回一个List,然后得到他的并行流,如果得到的搜索信息key为空,则返回所有的数据,如果不为空,则通过stream的filter过滤,再返回。
