博客开发:框架搭建
一.使用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); } }