SpringBoot-定时任务

142 阅读1分钟
简单的办法就是用基于注解(@Scheduled)方法。
  1. SpringBoot启动类增加注解 在这里插入图片描述

@EnableScheduling启动定时任务

  1. 实现类增加注解 在这里插入图片描述

@Component主要用于标记配置类,兼备Component的效果。

  1. 实现方法增加注解
	// 凌晨1点执行
    @Scheduled(cron = "${ims.sync.corn-expression}")
    public void syncFolderJob() throws InterruptedException {
        String[] appCodeArr = appCodes.split(",");
        for (String appCode : appCodeArr) {
            long startTime = System.currentTimeMillis(); // 代码执行前时间
            Future<String> taskSyncFolder = folderService.syncFolder(appCode);
            if(taskSyncFolder.isDone()) {
                 break;
             }
            Thread.sleep(1000);
            long endTime = System.currentTimeMillis(); // 代码执行后时间
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(endTime - startTime);
            log.info("应用:" + appCode + " 执行结束,耗时: " + c.get(Calendar.MINUTE) + "分 " +
                    c.get(Calendar.SECOND) + "秒 ");
        }
    }

@Scheduled除了支持灵活的参数表达式cron之外,还支持简单的延时操作,例如 fixedDelay ,fixedRate 填写相应的毫秒数即可。

这里我是在application.yml配置的corn执行时间。

Cron表达式参数分别表示:

秒(0~59) 例如0/5表示每5秒

分(0~59)

时(0~23)

日(0~31)的某天,需计算

月(0~11)

周几( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

corn在线生成地址:cron.qqe2.com

多线程启用定时任务方法:
  1. 启动类增加注解 在这里插入图片描述 @EnableAsync启用多线程注解

  2. 实现类和实现方法增加注解

@Component
@EnableScheduling   // 1.开启定时任务
@EnableAsync        // 2.开启多线程
public class SyncFolderScheduled {

    @Async
    @Scheduled(fixedDelay = 1000)  //间隔1秒
    public void first() throws InterruptedException {
        System.out.println("第一个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        System.out.println();
        Thread.sleep(1000 * 10);
    }

    @Async
    @Scheduled(fixedDelay = 2000)
    public void second() {
        System.out.println("第二个定时任务开始 : " + LocalDateTime.now().toLocalTime() + "\r\n线程 : " + Thread.currentThread().getName());
        System.out.println();
    }
}

到此,感谢各位观看。如果有不对的地方还请各位大佬指教。