# 企业级开发框架实验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 前端框架展示页面
(可通过操作选择器查看不同国家中不同地区的确诊人数)