# 企业级开发框架实验3
**Repository Path**: qipeiabc/test3
## Basic Information
- **Project Name**: 企业级开发框架实验3
- **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-05
- **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项目,添加功能模块:spring MVC、lombok、commons-csv等
```
org.springframework.boot
spring-boot-starter-web
org.apache.commons
commons-csv
1.8
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
```
2. 使用Spring框架自带的RestTemplate工具类爬取数据,定义server类
```
RestTemplate restTemplate = restTemplateBuilder.build();
for (String url : URL) {
URI uri = UriComponentsBuilder.fromUriString(url).build(43);
RequestEntity requestEntity = RequestEntity.get(uri).header("User-Agent", USER_AGENT).build();
ResponseEntity responseEntity = restTemplate.exchange(requestEntity, String.class);
String body = responseEntity.getBody();
CSVParser csvParser = null;
try {
csvParser = CSVFormat.DEFAULT.parse(new CharArrayReader(body.toCharArray()));
records.add(csvParser.getRecords());
} catch (IOException e) {
e.printStackTrace();
}
}
```
3. 分析csv文件的数据结构,定义model类
```
@Builder
@Data
public class InformData {
Long totalData; //总确诊数
Date updateTime; //更新时间
Long newAddData; //新增数
}
```
4. 使用Spring框架自带的计划任务功能定时更新统计数据
在启动类中加入
```
@EnableScheduling
```
配置文件中加入
```
updateCOVIDDataCron=0 0 5 * * *
```
serivce的更新类中
```
@Scheduled(cron = "${updateCOVIDDataCron}")
```
5. 单元测试
定义controller测试类
```
@SpringBootTest
@AutoConfigureMockMvc
class CoronaVirusTestController {
@Autowired
MockMvc mockMvc;
@Test
void data() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/data"))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk());
}
}
```
定义service测试类
```
@SpringBootTest
class CoronaVirusTestImpl {
@Autowired
CoronaVirusImpl coronaVirus;
@Test
void findAll() throws NoSuchMethodException {
ChartData chartForm = new ChartData();
List>> all = coronaVirus.findAll(chartForm);
Assert.isTrue(all.size() == 3, "查询数据出错");
}
@Test
void getinformData() {
InformData informData = coronaVirus.getInfoVO();
Assert.isTrue(informData.getNewAddData() > 0, "获取新增人数出错");
Assert.isTrue(informData.getTotalData() > 0, "获取总人数出错");
Assert.notNull(informData.getUpdateTime(), "获取更新时间出错");
}
}
```
6、定义controller查询器
```
@RestController
public class CoronaVirusController {
@Autowired
CoronaVirusImpl coronaVirus;
@GetMapping("/data")
public ShowData data(ChartData form) throws NoSuchMethodException {
return new ShowData(coronaVirus.findAll(form), coronaVirus.getInfoVO());
}
}
```
7、使用 vue+element+jquery+echart 前端框架展示页面
(可通过操作选择器查看不同国家中不同地区的确诊人数)