创建好SpringBoot项目后,框架自带的是properties文件,这里使用yml文件进行配置,所以将application.properties改为application.yml文件,并进行相关配置。 我们在开发项目的时候,一般开发环境和部署环境会不一样,为了加以区分,可以在yml配置文件中体现出来,所以分为application-dev.yml(开发环境)、application-pro.yml(部署环境),而为了能够让SpringBoot知道用的是哪个配置文件,需要在application.yml配置文件中加以说明,并且开发和部署中相同的配置也可以在application.yml中进行配置,详细配置如下:
-
application.yml:公共配置和表明当前配置文件
-
application-dev.yml:开发环境配置文件
-
application-pro.yml:部署环境配置文件
application.yml
spring:
thymeleaf:
mode: HTML
profiles:
active: pro
mybatis:
type-aliases-package: com.star.entity
mapper-locations: classpath:mapper
@Controller
public class IndexController {
//通过get方式请求路径
@GetMapping("/")
public String index(){
return “index”;
}
}
404页面测试:可以在在浏览器输入:http://localhost:8080/ ,可以访问到博客的首页,可以通过改变路径,如加一个无效的后缀,访问后发现跳转到我自己写的404页面
500页面测试:可以在IndexController控制器中加一句错误代码,人为的让服务器出错,如加一句:int a = 9/0; (分母不能为零,这样服务器就会出错),然后访问:http://localhost:8080/, 发现跳转到了500页面,这就说明没有问题(记得把导致500的错误注释掉)
2.全局异常处理
对于404和500错误页面,SpringBoot可以根据页面的命名方式找到对应的文件,而自定义的错误就需要我们自己来拦截了,让代码出现问题的时候跳转到我们自己定义的错误页面,这里就需要自定义拦截器。
在com.star文件夹下面新建hander包,创建ControllerExceptionHandler错误页面拦截器,通过定义这个类来拦截所有的异常,代码如下:
package com.star.controller.hander;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@ControllerAdvice
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;
}
}
分析:
- @ControllerAdvice表示拦截掉所有带有@Controller注解的控制器
- @ExceptionHandler表明是异常处理方法
- ModelAndView:返回一个页面信息
- 通过拦截异常信息,在日志中记录,并返回给error页面
- 标识了状态码的时候就不拦截,如资源找不到异常
3.资源找不到异常处理
对于资源找不到异常,一般也是要跳转到404页面的,这里就需要自定义一个异常类,专门用来应对资源找不到,在com.star文件夹下面新建NotFoundException类。
package com.star;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class NotFoundException extends RuntimeException{
public NotFoundException() {
}
public NotFoundException(String message) {
super(message);
}
public NotFoundException(String message, Throwable cause) {
super(message, cause);
}
}
分析:
- 继承RuntimeException,实现继承RuntimeException的构造函数
三、日志处理
- @ResponseStatus(HttpStatus.NOT_FOUND)注解表示资源找不到的状态码,标识了状态码的时候就不拦截
采用SpringBoot中的AOP进行日志处理,AOP可以以切面的形式拦截,将日志内容记录下来,这里记录以下日志信息:
-
访问的URL
-
访问者的IP
-
访问时调用的方法
-
访问时传递的参数
-
访问时返回的内容
1.添加依赖
在pom.xml中添加AOP的依赖
org.springframework.boot
spring-boot-starter-aop
2.切面处理
在com.star文件夹下面新建aspect包,创建LogAspect日志切面处理类,在这里对日志进行处理,代码如下:
package com.star.aspect;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)