博客开发:框架搭建

博客开发:框架搭建

一.使用idea快速搭建框架

 导入mybatis-plus依赖

 <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
 </dependency>

二.配置配置文件

配置yml文件

application.yml

spring:
  thymeleaf:
    mode: HTML
  profiles:
    active: pro
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

application-dev.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    password: 13476110270dwx
logging:
  level:
    root: info
    com.myblog.demo: debug
  file:
    name: log/blog-dev.log

application-pro.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myblog?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    password: 13476110270dwx

logging:
  level:
    root: warn
    com.myblog.demo: info
  file:
    name: log/blog-pro.log

并在resources文件夹下添加logback-spring.xml文件对日志进行配置

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--包含Spring boot对logback日志的默认配置-->
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <!--重写了Spring Boot框架 org/springframework/boot/logging/logback/file-appender.xml 配置-->
    <appender name="TIME_FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i</fileNamePattern>
            <!--保留历史日志一个月的时间-->
            <maxHistory>30</maxHistory>
            <!--
            Spring Boot默认情况下,日志文件10M时,会切分日志文件,这样设置日志文件会在100M时切分日志
            -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>

        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="TIME_FILE" />
    </root>

</configuration>
        <!--
            1、继承Spring boot logback设置(可以在appliaction.yml或者application.properties设置logging.*属性)
            2、重写了默认配置,设置日志文件大小在10MB时,按日期切分日志
        -->

三.异常处理

对404,500,error异常页面进行处理,错误页面的文件名称必须固定:

  • 404.html:浏览器错误,资源找不到
  • 500.html:服务端错误
  • error.html:自定义错误

全局异常处理

404和500的错误页面,SpringBoot可以根据页面的命名方式找到对应文件,自定义的错误就需要自定义拦截器来拦截异常信息并返回给error页面,创建异常拦截器,当异常标识了状态码时就不拦截,没标识状态码就拦截

@ControllerAdvice//拦截所有带Controller的控制器
public class ControllerExceptionHandler {
    //    将异常记录到日志
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @ExceptionHandler(Exception.class)
    public ModelAndView exceptionHander(HttpServletRequest request, Exception e) throws Exception {
        // 记录异常信息:请求的URL,异常信息
        logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);

        // 当标识了状态码的时候就不拦截
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }
        //    将记录的异常信息返回到error页面
        ModelAndView mv = new ModelAndView();
        mv.addObject("url",request.getRequestURL());
        mv.addObject("exception", e);
        mv.setViewName("error/error");
        return mv;
    }
}

资源找不到异常处理

资源找不到异常也有跳转到404页面,自定义一个异常类给其指定状态码就不会被拦截,创建资源找不到异常类

@ResponseStatus(HttpStatus.NOT_FOUND)
public class NotFoundException extends RuntimeException{
    //继承RuntimeException的构造函数
    public NotFoundException(){}
    public NotFoundException(String message){
        super(message);
    }
    public NotFoundException(String message,Throwable cause){
        super(message,cause);
    }
}
原文地址:https://www.cnblogs.com/python-road/p/14266899.html