# javaee_实验3
**Repository Path**: deepduckfts/javaee_experiment3
## Basic Information
- **Project Name**: javaee_实验3
- **Description**: springboot课程实验3
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-05-08
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
实验三
课程名称:企业级开发框架专题
学期:2020春季
|
实验名称 | 全球新型冠状病毒实时数据统计应用程序的设计与实现 | 实验序号 | 三 |
|
姓 名 | 李振辉 | 学 号 | 201741404223 | 班 级 | 17软件2班 |
|
实验地点 | | 实验日期 | 2020/5/7 | 指导老师 | 黎志雄 |
|
教师评语 | *** | 实验成绩 | 评阅教师 |
| 百分制 | ** |
|
同组同学 | 无 |
## 实验目标
1、 掌握使用Spring框架自带的RestTemplate工具类爬取网络数据;
2、 掌握使用Spring框架自带的计划任务功能;
3、 掌握使用Apache Commons CSV组件解释CSV文件;
4、 掌握Java 8的Stream API处理集合类型数据;
5、 了解使用模板引擎或前端框架展示数据。
## 实验步骤
### 1、打开IntelliJ IDEA,通过Spring Initializr向导创建Spring Boot项目,导入依赖

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

### 3、使用Spring框架自带的RestTemplate工具类爬取全球冠状病毒实时统计数据。

#### (application.yml配置文件)

### 4、通过Resource对象的getInputStream方法获取csv文件的输入流并保存数据,并给该方法加上@PostConstruct注解(启动时获取数据)和@Scheduled注解(每天凌晨1点更新数据)
```
@Override
@Scheduled(cron = "${myconfig.cron}")
@PostConstruct
public void getDataFromGit() throws IOException {
//发送http请求获取csv文件流
Resource resource = HTTPUtil.sendHttp(csvUrl);
InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream());
//解析csv文件
CSVParser parser = CSVFormat.DEFAULT.withHeader().withSkipHeaderRecord().parse(inputStreamReader);
for (CSVRecord record : parser.getRecords()) {
RegionStats regionStates = new RegionStats();
GlobalMap globalMap = new GlobalMap();
ArrayList value = new ArrayList<>();
//获取昨天新增数
Integer yesterday = Integer.valueOf(record.get(record.size() - 1));
Integer beforeYesterday = Integer.valueOf(record.get(record.size() - 2));
Integer diff = yesterday - beforeYesterday;
//设置每个州的信息
regionStates.setDiffFromPrevDay(diff);
regionStates.setState(record.get("Province/State"));
regionStates.setCountry(record.get("Country/Region"));
regionStates.setLatestTotalCases(yesterday);
//设置地图数据信息
String name = regionStates.getState().length() != 0 ? regionStates.getState() : regionStates.getCountry();
globalMap.setName(name);
globalMap.setCountry(regionStates.getCountry());
value.add(record.get("Long"));
value.add(record.get("Lat"));
value.add(record.get(record.size() - 1));
globalMap.setValue(value);
mapData.add(globalMap);
regionStatsList.add(regionStates);
//更新总数和新增数
globalTotalCases += yesterday;
globalTotalIncreased += diff;
}
}
```
### 5、定义controller控制器

### 6、使用freemarker前端模板来渲染数据信息



