
正文
SpringBoot学习笔记(七):SpringBoot使用AOP统一处理请求日志、SpringBoot定时任务@Scheduled、SpringBoot异步调用Async、自定义参数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
SpringBoot使用AOP统一处理请求日志
这里就提到了我们Spring当中的AOP,也就是面向切面编程,今天我们使用AOP去对我们的所有请求进行一个统一处理。首先在pom.xml中引入我们需要的aop的jar包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
然后我们新建一个Aspect去对我们的所有Controller进行一个日志拦截。在SPringBoot中我们使用AOP也是很简单的,只需要在类上加上一个@Aspect的注解就好了,然后通过@Component注解到我们的Spring容器中去。
我们新建一个包com.majiaxueyuan.log专门用来放我们的日志记录,代码如下:
@Aspect@Component@Slf4jpublic class MjxyLogAspect { //第一个 * 号表示任意返回类型,第二个 * 号表示Person的所有方法@Pointcut("execution(public * com.majiaxueyuan.controller..*.*(..))")public void webLog() {}@Before("webLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容log.info("URL : " + request.getRequestURL().toString());log.info("HTTP_METHOD : " + request.getMethod());log.info("IP : " + request.getRemoteAddr());Enumeration<String> enu = request.getParameterNames();while (enu.hasMoreElements()) {String name = (String) enu.nextElement();log.info("name:{},value:{}", name, request.getParameter(name));}}@AfterReturning(returning = "ret", pointcut = "webLog()")public void doAfterReturning(Object ret) throws Throwable {// 处理完请求,返回内容log.info("RESPONSE : " + ret);}}
然后我们通过浏览器随便请求一次,可以看到控制台输出,这里我们就可以在实际生产环境中存储日志。
SpringBoot定时任务@Scheduled
在service中新建一个类ScheduledTest,代码如下:
@Componentpublic class ScheduledTest {private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");@Scheduled(fixedRate = 2000)public void scheduled() {System.out.println("码家学院提示你==》现在时间:" + dateFormat.format(new Date()));}}
另外我们需要在主函数启动类上开启定时器
@SpringBootApplication@EnableSchedulingpublic class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}}
SpringBoot异步调用Async
这个和定时器差不多,启动加上@EnableAsync ,只需要在我们需要异步的方法上面加上@Async注解
异步就是在主线程中部分代码执行另一个线程,而另一个线程不影响主线程的执行。
AsyncTest.java
@Componentpublic class AsyncTest{ @Async public void asyncOut(){sout(Thread.currentThread().geetId());}}
启动类中
@SpringBootApplication@EnableAsyncpublic class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}}
@RequestMapping("/login")public String login(){sout(Thread.currentThread().getId());asyncTest.asyncOut();return "loginPage"}
运行的结果发现两个id是不同的,说明成功了。
自定义参数
在配置文件中我们可以去在配置文件中自定义一些参数,比如:
name=majiaxueyuan
我们在代码中获取到我们的这个配置文件
@Value("${name}")private String name;@ResponseBody@RequestMapping("/getValue")public String getValue() {return name;}








