1、前言❝ 前情回顾:
❞
本篇文章,在前几篇文章的基础上,我们实战练习;❝ 使用的知识点为:
❞代码生成器,自动生成Controller、 Service、serviceImpl、entity、mapper和 mapper xml代码;
定时任务,定时获取最新天气数据和定时自动发送天气预报邮件
使用jsoup写爬虫爬取天气预报数据,并存入mysql;
2、安装依赖❝ pom.xml
❞
org.jsoup
jsoup
1.10.3
org.springframework.boot
spring-boot-starter-mail
org.springframework.boot
spring-boot-starter-thymeleaf
ognl
ognl
3.2.14
使用 jsoup 爬取页面,并做HTML结构解析。
3、mysql数据库建表
/*
Navicat Premium Data Transfer
Source Server : local_mysql
Source Server Type : MySQL
Source Server Version : 80018
Source Host : localhost:3306
Source Schema : test
Target Server Type : MySQL
Target Server Version : 80018
File Encoding : 65001
Date: 19/06/2020 22:40:01
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for weather
-- ----------------------------
DROP TABLE IF EXISTS `weather`;
CREATE TABLE `weather` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '名字',
`status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '天气状态',
`date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '当前日期',
`max` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最高气温',
`min` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '最低气温',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `date` (`date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1759 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
设置 id 为主键PRIMARY KEY,date 为唯一约束 UNIQUE KEY,这样的话,我每次定时爬取数据,存入数据库的时候,就能避免重复数据。
4、生成器生成代码
执行 com.scaffold.test.base.CodeGenerator中的 main 方法:
如果有同学对生成器不知道怎么配置的,请前往前面的文章看一下;❝ com.scaffold.test.entity.Weather:实体类
❞
package com.scaffold.test.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
* 实体类
*
*
* @author alex wong
* @since 2020-06-18
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class Weather implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private String status;
private String date;
// 最高气温
private String max;
// 最低气温
private String min;
private LocalDateTime createTime;
}❝ com.scaffold.test.service.WeatherService: 服务类接口
❞
package com.scaffold.test.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.scaffold.test.entity.Weather;
import org.jsoup.nodes.Document;
import java.util.List;
/**
*
* 服务类
*
*
* @author alex wong
* @since 2020-06-18
*/
public interface WeatherService extends IService {
}❝ com.scaffold.test.service.impl.WeatherServiceImpl: 服务实现类
❞
package com.scaffold.test.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.scaffold.test.entity.Weather;
import com.scaffold.test.mapper.WeatherMapper;
import com.scaffold.test.service.WeatherService;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author alex wong
* @since 2020-06-18
*/
@Service
public class WeatherServiceImpl extends ServiceImpl implements WeatherService {
}❝ com.scaffold.test.mapper.WeatherMapper: Mapper 接口
❞
package com.scaffold.test.mapper;
import com.scaffold.test.entity.Weather;</