# 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项目,导入依赖 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/180953_760fa03b_5507626.png "屏幕截图.png") ### 2、分析csv文件的数据结构,定义model类。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/181623_13b9598d_5507626.png "屏幕截图.png") ### 3、使用Spring框架自带的RestTemplate工具类爬取全球冠状病毒实时统计数据。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/181129_f303e446_5507626.png "屏幕截图.png") #### (application.yml配置文件) ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/181430_73face5c_5507626.png "屏幕截图.png") ### 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控制器 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/182536_a11eb5b5_5507626.png "屏幕截图.png") ### 6、使用freemarker前端模板来渲染数据信息 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/183018_9176050a_5507626.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/183030_97348945_5507626.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/183055_5db31f33_5507626.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2020/0508/183240_a5d045c2_5507626.png "屏幕截图.png")