Springboot项目-开发日记-登录注册

毕业设计开发日记

2021/01/22

  • CMS用户名渲染和注销功能实现, 模板抽离和个人信息页面, 后台修改密码界面完成
    Springboot项目-开发日记-登录注册_第1张图片

2021/01/23

  • 推翻从来,不用python写后端了
  • 跟着课程+官方文档去学习Spring Boot
  • 后期需要写接口文档(showdoc, postman)
  • 需要建立数据逻辑,数据库建表等等操作
  • 什么什么路径预测,路况算法模型什么鬼哦

2021/01/24

  • 昨天拿到的温州市出租车交通轨迹数据今天打算下载oracle数据库打开.dmp文件试试
  • 我如果要进行数据处理的话还需要学习一些java数据处理相关的知识
  • 安装了Oracle数据库,接下来准备安装SQL developer然后再对.dmp的数据文件进行处理
    Springboot项目-开发日记-登录注册_第2张图片

2021/01/29

  • 今天一大早找到一个github前后端分离项目(springboot+vue)准备好好消化一下,因为看视频的进度太慢了
    Springboot项目-开发日记-登录注册_第3张图片
    https://learner.blog.csdn.net/article/details/88925013

2021/01/30

  • 继续跟着白卷项目写了个登录功能和图书管理页

    Springboot项目-开发日记-登录注册_第4张图片
  • 稍微熟悉了vue和springboot,就此收手,不继续这个白卷项目了

2021/02/02

  • 准备将**车辆行驶数据库的东西那个.dmp文件在oracle数据库中打开然后导出为mysql数据
  • 虽然下载了oracle但是登录不了,看着教程下了PLsql DEVELOPER还在折腾中,先是在SQL plus中新创建用户之后再授权新用户
  • 导入数据库需要dba权限,需要高级用户去授权,授权之后导入表却发现表空间缺失,报错

在这里插入图片描述
Springboot项目-开发日记-登录注册_第5张图片

  • 导入成功了但是oracle数据库压根不会用,上网查如何将oracle的数据导出为sql格式,并成功导出

Springboot项目-开发日记-登录注册_第6张图片

  • 去查看自己导入了一堆什么东西(…完蛋,数据是有了但是这些数据怎么处理?在这个oracle我好难受啊咋办啊)
    Springboot项目-开发日记-登录注册_第7张图片

  • 我还是很想把这些数据导出成sql的样子让我能用Navicat打开,结果导出了一堆头疼的玩意

Springboot项目-开发日记-登录注册_第8张图片

  • 尝试用Navicat打开Oracle数据库然后进行数据传输(这数据量也太大了吧我的天…)
    Springboot项目-开发日记-登录注册_第9张图片

  • 不行,这个数据传输太慢了,传了半天0%,这个量级太大了我还是只用其中的1000条记录意思一下就好了
    在这里插入图片描述

  • 表的结构
    Springboot项目-开发日记-登录注册_第10张图片
    Springboot项目-开发日记-登录注册_第11张图片

  • 算是简单处理好了数据库吧,后续如果遇到问题那么再对这个数据库进行调整,接下来打算去把注册登录功能完善

  • 接下来优化注册登录功能,准备用mybatis进行数据库交互+swagger2自动生成api接口文档并测试

2021/02/03

  • 今天想要去完成注册和登录功能,但是注册和登录一般都需要拦截器功能,不管怎么样第一步先设计一张user表出来吧
    Springboot项目-开发日记-登录注册_第12张图片

  • 设计完表之后开始写注册和登录:
    Springboot项目-开发日记-登录注册_第13张图片
    功能分析

    • 登录(Login):
      1. 验证(用户名or手机号码or邮箱)与密码是否匹配
      2.1 验证成功跳转页面到index
      2.2 验证失败提示用户名或者密码错误,返回登录界面
    • 注册(Register):
      1. 跳转到注册页面
      2. 依次填写username,password,email, phone,和三个密保问题
      3.1 注册成功重定向到登录界面
      3.2 注册失败提示(用户名已存在,邮箱格式不对,电话格式不对)
    • 忘记密码(Fogotten password):
      1. 跳转到重置密码页面
      2. 回答一个密保问题
      3.1 回答正确则重置密码并回到登录界面
      3.2 回答失败则换一个密保问题直到回答正确
  • 创建整体架构
    Springboot项目-开发日记-登录注册_第14张图片

  • 贴一些关键代码

  • application.yaml
    全局配置文件

server:
  port: 8443

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/wz_traffic?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    username: root
    password: admin

mybatis:
  type-aliases-package: com.zzzxlz.pojo
  mapper-locations: classpath:mybatis/mapper/*.xml
  config-location: classpath:mybatis/mybatis-config.xml


  • mapper.UserMapper
    mapper包放置数据层实现接口
@Mapper
@Repository
public interface UserMapper {
     

    List<User> queryUserList();

    User queryUserById(int id);

    User queryUserByName(String name);

    User queryUserByEmail(String email);

    User queryUserByPhone(String phone);

    int addUser(User user);

    int updateUser(User user);

    int deleteUser(int id);
}
  • service.UserService
    service包放业务层逻辑代码
package com.zzzxlz.service;

import com.zzzxlz.mapper.UserMapper;
import com.zzzxlz.pojo.User;
import com.zzzxlz.utils.Myutils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;



@Service
public class UserService {
     

    @Autowired
    UserMapper userMapper;


    public List<User> getUserList(){
     
        return userMapper.queryUserList();
    }

    public User getUserById(int id){
     
        return userMapper.queryUserById(id);
    }

    public User getUserByName(String name){
     
        return userMapper.queryUserByName(name);
    }

    public User getUserByEmail(String email){
     
        return userMapper.queryUserByEmail(email);
    }

    public User getUserByPhone(String phone){
     
        return userMapper.queryUserByPhone(phone);
    }

    public User getUserByPwd(String password){
     
        return userMapper.queryUserByPwd(password);
    }

    public int addUser(User user){
     
        return userMapper.addUser(user);
    }

    public int updateUser(User user){
     
        return userMapper.updateUser(user);
    }

    public int deleteUser(int id){
     
        return userMapper.deleteUser(id);
    }

    //判断用户是否已经存在
    public boolean isExist(String username) {
     
        User user = userMapper.queryUserByName(username);
        return null != user;
    }


    //注册
    public int register(User user){
     
        String username = user.getUsername();
        String password = user.getPassword();
        String email = user.getEmail();
        String phone = user.getPhone();
        String question = user.getQuestion();

        //判断一些错误情况
        if (username.equals("") || password.equals("")) {
     
            return 0;
        }

        //判断用户名是否已经存在
        if (isExist(username)) {
     
            return 2;
        }

        //邮箱格式错误
        if (!Myutils.isEmail(email)){
     
            return 3;
        }

        //手机号码格式错误
        if (!Myutils.isPhoneNumber(phone)){
     
            return 4;
        }

        //注册成功返回
        return 1;
    }

    //登录
    public int login(User user){
     
        User userInDB = null;
        String password = user.getPassword();
        String username = user.getUsername();
        String email = user.getUsername();
        String phone = user.getUsername();
        if (username != null){
     
            userInDB = userMapper.queryUserByName(username);
            if (password == userInDB.getPassword()){
     
                return 1;
            } else {
     
                return 2;
            }
        }
        if (phone != null){
     
            userInDB = userMapper.queryUserByName(email);
            if (password == userInDB.getPassword()){
     
                return 1;
            } else {
     
                return 3;
            }
        }
        if (email != null){
     
            userInDB = userMapper.queryUserByName(phone);
            if (password == userInDB.getPassword()){
     
                return 1;
            } else {
     
                return 4;
            }
        }
        return 0;
    }



    //忘记密码回答密保问题重设密码
    public int resetPassword(User user){
     
        User userInDB = userMapper.queryUserByName(user.getUsername());
        if (userInDB.getQuestion() == user.getQuestion()){
     
            userInDB.setPassword(user.getPassword());
            userMapper.updateUser(userInDB);
            return 1;
        }
        return 0;
    }


}

  • controller.LoginController
    controller包用于处理浏览器的请求
package com.zzzxlz.controller;

import com.zzzxlz.pojo.User;
import com.zzzxlz.result.Result;
import com.zzzxlz.result.ResultFactory;
import com.zzzxlz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * @author shkstart
 * @create 2021-02-03 12:55
 */
@Controller
public class LoginController {
     

    @Autowired
    UserService userService;

    //响应注册的post方法
    @PostMapping("/api/register")
    public Result register(@RequestBody User user){
     
        int status = userService.register(user);
        switch (status){
     
            case 0:
                return ResultFactory.buildFailResult("用户名和密码不能为空");
            case 1:
                return ResultFactory.buildSuccessResult("注册成功");
            case 2:
                return ResultFactory.buildFailResult("用户已存在");
            case 3:
                return ResultFactory.buildFailResult("邮箱格式不正确");
            case 4:
                return ResultFactory.buildFailResult("手机格式不正确");
        }
        return ResultFactory.buildFailResult("未知错误");
    }

    //响应登录的post方法
    @PostMapping("/api/login")
    public Result login(@RequestBody User requestUser){
     
        int status = userService.login(requestUser);
        switch (status){
     
            case 0:
                return ResultFactory.buildFailResult("未知错误");
            case 1:
                return ResultFactory.buildSuccessResult("登录成功");
            case 2:
                return ResultFactory.buildFailResult("用户名或者密码输入错误");
            case 3:
                return ResultFactory.buildFailResult("手机号或者密码输入错误");
            case 4:
                return ResultFactory.buildFailResult("邮箱或者密码输入错误");

        }
        return ResultFactory.buildFailResult("未知错误");
    }

    //响应忘记密码的post方法
    @PostMapping("/api/resetPwd")
    public Result resetPwd(@RequestBody User requestUser){
     
        int status = userService.resetPassword(requestUser);
        switch (status){
     
            case 0:
                return ResultFactory.buildFailResult("密保问题回答错误");
            case 1:
                return ResultFactory.buildSuccessResult("密码重置成功");
        }
        return ResultFactory.buildFailResult("未知错误");
    }
}

  • result.Result
    result包存放响应结果集
package com.zzzxlz.result;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Result {
     
    //响应码
    private int code;
    //信息
    private String message;
    //结果
    private Object result;
}

  • result.ResultCode
    枚举类(响应码)
package com.zzzxlz.result;

public enum ResultCode {
     
    SUCCESS(200),
    FAIL(400),
    //UNAUTHORIZED(401),
    NOT_FOUND(404),
    INTERNAL_SERVER_ERROR(500);

    public int code;

    ResultCode(int code){
     
        this.code = code;
    }

}


  • result.ResultFactory
    工厂方法
package com.zzzxlz.result;


public class ResultFactory {
     
    public static Result buildSuccessResult(Object data){
     
        return buildResult(ResultCode.SUCCESS, "成功", data);
    }

    public static Result buildFailResult(String message){
     
        return buildResult(ResultCode.FAIL, message, null);
    }

    public static Result buildResult(ResultCode resultCode, String message, Object data) {
     
        return buildResult(resultCode.code, message, data);
    }

    public static Result buildResult(int resultCode, String message, Object data){
     
        return new Result(resultCode, message, data);
    }
}

  • utils.Myutils
    自定义工具类
package com.zzzxlz.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static org.apache.logging.log4j.util.Strings.isEmpty;


public class Myutils {
     
    /**
     * 验证手机号码是否正确,正确返回true,否则返回false
     * @param phoneNumber
     * @return
     */
    public static boolean isPhoneNumber(String phoneNumber) {
     
        if (isEmpty(phoneNumber)) {
     
            return false;
        }

        String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(16[5,6])|(17[0-8])|(18[0-9])|(19[1、5、8、9]))\\d{8}$";
        if (phoneNumber.length() != 11) {
     
            return false;
        } else {
     
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phoneNumber);
            return m.matches();
        }
    }
    /**
     * 验证邮箱格式是否正确,正确返回true,否则返回false
     * @param email
     * @return
     */
    public static boolean isEmail(String email) {
     
        if (email == null)
            return false;
        String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern p;
        Matcher m;
        p = Pattern.compile(regEx1);
        m = p.matcher(email);
        if (m.matches())
            return true;
        else
            return false;
    }

}

  • 接下来要用Swagger2进行调试
    Springboot项目-开发日记-登录注册_第15张图片
    Springboot项目-开发日记-登录注册_第16张图片

  • 稍微了解一下部署项目到服务器,一般有两种选择

    • 方法一: 把前端项目部署在 web 服务器中,把后端项目部署在应用服务器中
    • 方法二: 把前端项目打包,作为后端项目的静态文件,再把后端项目部署在应用服务器中

选择方法一, 首先下载 nginx,官方网址如下:
http://nginx.org/en/download.html

Springboot项目-开发日记-登录注册_第17张图片

2021/02/04

  • 今天想用postman去测试接口,上网查攻略ing
    结果发现还不如我的swagger2好用,我老老实实用swagger2吧
    Springboot项目-开发日记-登录注册_第18张图片

Springboot项目-开发日记-登录注册_第19张图片
Springboot项目-开发日记-登录注册_第20张图片

  • 注册登录重置密码的三个接口测试成功,然后在ShowDoc上面完成了三个接口的文档
    Springboot项目-开发日记-登录注册_第21张图片

  • 接下来试试看nginx,下载好之后去阿里云学生认证,然后参加高校计划
    Springboot项目-开发日记-登录注册_第22张图片
    Springboot项目-开发日记-登录注册_第23张图片

  • 现在有了自己的一台服务器了,我要把我的简单的springboot项目打包部署试试

  • 安装了jdk1.8

  • 打包部署了自己的springboot程序

  • 在服务器后台运行
    Springboot项目-开发日记-登录注册_第24张图片- 自己浏览器访问尝试
    Springboot项目-开发日记-登录注册_第25张图片

  • 那么接下来就是在服务器安装mysql,然后把数据库放上去,这样就是一个后端可调用的api程序在服务器上跑着了

  • 上网查攻略,然后在服务器下载了宝塔

  • 在下载宝塔之前需要把服务器的端口给开了
    在这里插入图片描述

  • 使用putty通过ssh连接远程服务器,然后通过以下命令去安装宝塔面板

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

然后
Springboot项目-开发日记-登录注册_第26张图片

  • 通过宝塔面板再去一键安装mysql以及其他软件
    Springboot项目-开发日记-登录注册_第27张图片
  • 想要用Navicat通过SSH连接远程服务器的mysql数据库但是发现连接不上
    Springboot项目-开发日记-登录注册_第28张图片
  • 再去查攻略…开始使用Linux连接mysql数据库的时候,出现了1045错误。当出现这个问题的时候,应该是用户被数据库拒绝访问了,我们应该为你的数据库开辟权限。
    Springboot项目-开发日记-登录注册_第29张图片
  • 头疼这个mysql怎么登录进去,原来要在宝塔中设置好root用户的密码先
    Springboot项目-开发日记-登录注册_第30张图片
  • 然后再给其他用户授权
mysql -uroot -padmin
mysql> use mysql; 
mysql> select host,user from user;
mysql> set password for 'root'@'%' =password('数据库英文密码');  #设置mysql数据库密码

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '数据库密码' WITH GRANT OPTION;
# 修改授权,赋予任何主机访问数据库的权限

mysql> FLUSH PRIVILEGES;  # 刷新权限,授权修改生效
mysql> exit;       # 退出MySQL服务器
# 当再用Navicat连接时,密码输入上面修改的密码
  • 但是我发现好像ssh通道的22号端口一直被占用
    请确保在 Linux 服务器的参数「AllowTcpForwarding」设置值为「yes」,否则,会禁用 SSH port forwarding。要查找路径:/etc/ssh/sshd_config。在默认情况下,SSH port forwarding 应该已启用。请仔细检查该值的设置。 即使服务器支持 SSH 通道,然而,如果 port forwarding 被禁用,Navicat 就无法通过 SSH 端口 22 连接。
    博客: Navicat(连接) -之SSH 设置(SSH远程登录失败,提示“Password authentication failed”).
  • 结果是我还是没能成功的通过Navicat连上Server的数据库,明天再整吧…

2021/02/05

  • 我怀疑是因为宝塔面板让我的程序挂掉的,我决定用宝塔那边的套路来重新部署一遍我的springboot程序,先把该开的端口都给开掉
    Springboot项目-开发日记-登录注册_第31张图片
  • 现在可以访问到程序页面了,接下来导入数据库
    在这里插入图片描述
    Springboot项目-开发日记-登录注册_第32张图片
  • 数据库处理成功,接下来开始跑程序试试接口是否正常
#用连接 Linux 的工具先切换到项目 jar 包所在命令, nohup command &  (其中 command 是你运行项目输入的命令)
nohup java -jar onlile-1.0.0-SNAPSHOT.jar > log.txt &

ps -ef | grep java :查看java 运行的几个端口号
kill -9 端口号 :杀死端口号,关闭程序。
cat info.log :查看文件

nohup java -jar huida-claimcloud-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > clmcloud-start.log &
  • swagger-ui测试接口
    Springboot项目-开发日记-登录注册_第33张图片
    Springboot项目-开发日记-登录注册_第34张图片
    测试成功!
    在自己程序上加上跨域处理的代码
    config.CorsConfig
@Configuration
public class CorsConfig implements WebMvcConfigurer {
     
    @Override
    public void addCorsMappings(CorsRegistry registry) {
     
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                //.allowCredentials(true)
                //.maxAge(3600)
                .allowedHeaders("*");
    }
}
  • 然后用自己的登录页面去尝试调用我服务器的接口,打开F12,查看情况
    Springboot项目-开发日记-登录注册_第35张图片
    成功跳转到主页
    Springboot项目-开发日记-登录注册_第36张图片
  • 现在再部署一个当初跟着攻略写下来的前后端分离项目的后端程序
  • 将vue项目build完成然后复制nginx-1.19.6/html文件夹下
    Springboot项目-开发日记-登录注册_第37张图片
    Springboot项目-开发日记-登录注册_第38张图片
  • 前端nginx准备就绪
  • 后端部署
    Springboot项目-开发日记-登录注册_第39张图片
  • 查询java进程发现确实有两个后台程序在服务器中跑着
  • 启动nginx.exe
Windows:
注意不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程
在nginx.exe目录,打开命令行工具,用命令 启动/关闭/重启nginx

start nginx #启动nginx
nginx -s reload  #修改配置后重新加载生效
nginx -s reopen  #重新打开日志文件
nginx -t -c /path/to/nginx.conf #测试nginx配置文件是否正确
关闭nginx:
nginx -s stop  #快速停止nginx
nginx -s quit  #完整有序的停止nginx

如果遇到报错:
bash: nginx: command not found
有可能是你再linux命令行环境下运行了windows命令,
如果你之前是允许 nginx -s reload报错, 试下 ./nginx -s reload
或者 用windows系统自带命令行工具运行

Linux:
nginx  #打开 nginx
nginx -t     #测试配置文件是否有语法错误
nginx -s reopen  #重启Nginx
nginx -s reload    #重新加载Nginx配置文件,然后以优雅的方式重启Nginx
nginx -s stop   #强制停止Nginx服务
nginx -s quit   #优雅地停止Nginx服务(即处理完所有请求后再停止服务)

nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

-?,-h           : 打开帮助信息
-v              : 显示版本信息并退出
-V              : 显示版本和配置选项信息,然后退出
-t              : 检测配置文件是否有语法错误,然后退出
-q              : 在检测配置文件期间屏蔽非错误信息
-s signal       : 给一个 nginx 主进程发送信号:stop(强制停止), quit(优雅退出), reopen(重启), reload(重新加载配置文件)
-p prefix       : 设置前缀路径(默认是:/usr/share/nginx/)
-c filename     : 设置配置文件(默认是:/etc/nginx/nginx.conf)
-g directives   : 设置配置文件外的全局指令

Springboot项目-开发日记-登录注册_第40张图片

  • 填写用户名和密码
    Springboot项目-开发日记-登录注册_第41张图片
  • 跳转页面成功
    Springboot项目-开发日记-登录注册_第42张图片
  • 所以nginx的用处就是在本地把项目跑起来然后可以远程调用到服务器上的接口

2021/02/06

  • 今天先把白卷整个全都放在服务器试试
    nginx启动服务提示98: Address already in use错误的解决->sudo nginx -s stop
  • Nginx 是一款轻量级的Web 服务器/反向代服务器及电子邮件代理服务器
  • Nginx是服务器的话,也就是说我通过nginx部署的前端vue项目走的不是走同源策略
    在这里插入图片描述
    Fail: 这里如果写了localhost而不是服务器的ip地址的话那么是对接不到后端接口的
  • 现在知道了如何把前端vue项目放到线上供人访问了
    Springboot项目-开发日记-登录注册_第43张图片
  • 接下来继续做我的项目,首先我不想我的日志输出一大堆乱七八糟的信息让我不知道看什么
  • 那么就需要一个log4j2组件去自定义我的输出日志
    Springboot项目-开发日记-登录注册_第44张图片
  • 报错为log4j依赖包的重复,分析:zookeeper 包中默认引入了slf4j-log4j12包,除此之外,还有我们springboot 一定引入的spring-boot-starter 包,它里边也有这个slf4j-log4j12 引入。
  • 我们只要在pom.xml 里排除这个即可。
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starterartifactId>
    <exclusions>
        
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-loggingartifactId>
        exclusion>
    exclusions>
dependency>
  • 在resources根目录文件夹下创建一个log4j2.xml的配置文件
    resources.log4j2




<configuration status="WARN" monitorInterval="30">
    
    <appenders>
        
        <console name="Console" target="SYSTEM_OUT">
            
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
        console>
        
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        File>
        
        <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            Policies>
        RollingFile>
        <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            Policies>
            
            <DefaultRolloverStrategy max="20"/>
        RollingFile>
        <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            Policies>
        RollingFile>
    appenders>
    
    <loggers>
        
        <logger name="org.springframework" level="INFO">logger>
        <logger name="org.mybatis" level="INFO">logger>
        <root level="all">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        root>
    loggers>

configuration>

resources.application.yaml

logging:
  config: classpath:log4j2.xml

controller.TestController

@Log4j2
@RestController
public class TestController {
     

    @RequestMapping("/test")
    public String test(){
     
        log.trace("I atestm trace log.");
        log.debug("I am debug log.");
        log.warn("I am warn log.");
        log.error("I am error log.");
        return "/test";
    }
}
  • 然后运行项目,这样日志算是处理好了,接下来是开发新功能去了
    在这里插入图片描述
  • 分析功能页面,emmmm没有头绪还是先去看看高德api有没有什么可以使用的吧
    Springboot项目-开发日记-登录注册_第45张图片

2021/02/07

Springboot项目-开发日记-登录注册_第46张图片

  • 功能模块分析

    • 功能Route Plan:我有的是一个数据库,数据库中只有一些gps信息,那我要完成这个功能模块的话还是需要调用高德api来帮忙的.
      • 有四种模式(自驾,步行,公交,骑行)
      • 三种筛选方式(最短距离,最少的费用,最少的时间)
      • 两个地点(起始地点和终点)
      • 返回数据(距离,价格,时间)
    • 功能Road Congestion Ranking:(分析数据库数据)
      • 返回数据(Rank排名,Road名称,Congestion指数)
        Springboot项目-开发日记-登录注册_第47张图片
  • 功能模块分析

    • 功能Prediction:
      • 前端发送请求,请求中携带数据(Date,District,Street):
        • 地区下拉框固定几个地区就好
        • 街道也固定几个就好
      • 返回数据:
        • 描述一下这天是否为节日,路况信息如何(这个我自己编一下好了)
    • 功能Weather(前端可以拿这个接口去做右上角的时间温度天气实时展示):
      • 这个我可以返回现在的时间,日期,周几,天气如何,温度多少
  • 高德api可以帮我做到很多事情,路径规划什么什么的都可以,包括天气信息,我可以通过springboot给这个高德api进行再封装,因为高德api返回的信息有点多,我们项目比较简单我就可以通过springboot去调用高德api然后对信息进行处理,然后给前端返回一个比较简洁的json数据.

  • 温州市区街道列表

  • 温州市区各个街道的经纬度

  • 天气预测的数据

  • 路况数据

  • 现在比较头疼的一点是我如何去获取这些数据,然后再把这些数据放到数据库去

2021/02/08

Springboot项目-开发日记-登录注册_第48张图片

  • 找了一份数据,但是觉得不是很详细
  • 然后跟着视频教程去学习springboot框架应用了

你可能感兴趣的:(spring,boot,java,vue)