在SpringBoot中用AOP統計正在執行的定時任務(@Scheduled)


在pom.xml中增加下列依賴:

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

AOP類代碼如下:

@Aspect
@Component
public class ScheduledAspect {
    private static Logger logger = Logger.getLogger(ScheduledAspect.class);
    
    @Autowired
    private RedisService redisService;

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

    @Around("proxyAspect()")
    public Object doInvoke(ProceedingJoinPoint pjp) throws Throwable {
        // 獲取方法名
        String methodName = pjp.getSignature().getName();
        
        // 打印正在執行的方法到控制台
        String redisMember = String.format("%s %s", DateUtil.toDateTimeString(new Date()), methodName);
        System.out.println(redisMember);
        
        // 將方法名+開始時間保存到redis,執行結束后從redis刪除
        try {
            redisService.getRedis().sadd("xhs-task", redisMember);
            return pjp.proceed();
        } catch (Exception e) {
            logger.error(methodName, e);
            return null;
        } finally {
            try {
                redisService.getRedis().srem("xhs-task", redisMember);
            } finally {
                RedisService.closeRedis();
            }
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM