SpringBoot之使用aop切面记录@Scheduled定时任务开始时间和结束时间

【饿了么、美团】外卖红包领取地址 >> 能省一点是一点

在使用SpringBoot的时候,要实现一个定时任务的功能非常简单,只要要定时执行的方法上添加@Scheduled注解即可(启动类上记得加@EnableScheduling,否则不生效)。定时任务相关不是本文内容,本文内容是想使用aop切面记录定时任务执行的开始时间和结束时间。

要使用aop,首先得引入aop的包。在SpringBoot中只要在pom中引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

即可,接下来是aop的关键,如何对定时任务进行切面,即切面的切点是什么。

因为定时任务是使用@Scheduled注解,所以我们可以使用这个注解作为切面的切点。

@Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
public void pointCut(){}

接下来就是记录开始时间和结束时间需要执行的方法,我们使用@Before(“pointCut()”)和@After(“pointCut()”)这两个注解即可。

切面类完整代码:

/**
 * 定时任务切面
 */
@Aspect
@Component
public class TaskAspect {

    @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
    public void pointCut(){}

    @Before("pointCut()")
    public void beforeHandle(JoinPoint joinPoint) {
        String taskName = getTaskName(joinPoint);
        System.out.println(DateUtil.now()+" "+taskName+"方法开始----");
    }

    @After("pointCut()")
    public void afterHandle(JoinPoint joinPoint) {
        String taskName = getTaskName(joinPoint);
        System.out.println(DateUtil.now()+" "+taskName+"方法结束----");
    }

    /**
     * 获取定时任务类加名字
     */
    private String getTaskName(JoinPoint joinPoint){
        return joinPoint.getTarget().getClass().getSimpleName()+"."+joinPoint.getSignature().getName();
    }

}

运行效果:

代码:https://gitee.com/lqccan/blog-demo/tree/master/SpringBoot/aop


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍

花沃里 生石灰粉10斤大树涂白 改良土壤驱虫净水白灰刷树果蔬涂白剂干燥剂 氧化钙 除湿白灰防潮脱硫水处理
¥27.30
顾小家目测隐血试纸潜血试纸红细胞试纸肾炎检测结石检测家用尿常规试纸25条一盒装
¥23.00
初中必读12部名著精讲初中生课外书籍名著全套十二本名著导读考点精炼七八九年级语文中考阅读经典书目中学生朝花夕拾
¥24.48
乐荔 长柄穿鞋拔子提鞋棒家用懒人老年人孕妇实木提鞋器 加长款70cm花梨木
¥26.90
南京同仁堂南同四海 薏米500g 薏仁米 薏苡仁中药材 生薏米仁可炒熟小粒
¥26.70
全棉时代毛巾纯棉洗脸巾家用不易掉毛加大加厚方巾强效抗菌柔软强吸水干洁面巾麦卡黄32×70cm
¥34.90
洁丽雅(Grace)A类珊瑚绒浴巾 成人男女士洗澡大毛巾柔软吸水不掉毛纤维裹巾 201g/条 120*60cm 米白色
¥22.90
铂芬沙发抱枕靠垫套【不含芯】靠枕套腰靠背套 新中式宝蓝色 45*45cm
¥15.90