spring的定时任务 @Scheduled 和 @EnableScheduling

定时任务, 按照bean注入,除了要在执行的方法上面设置@Scheduled外,还要在启动类上添加@EnableScheduling

@Scheduled:计划任务声明

@EnableScheduling :开启计划任务支持


在启动类或每个定时任务上面加都可以,就是一个是加一个注解就可以,一个是一个定时任务一个注解



@Scheduled:

1.cron:cron表达式,指定任务在特定时间执行;

2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;

3.fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;

4.fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;

5.fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;

6.initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms;

7.initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;

8.zone:时区,默认为当前时区,一般没有用到。


对于spring的@Scheduled默认是单线程的,要是想实现多线程,这要重写scheduled的一个方法:


import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;


import java.util.concurrent.Executors;


/**
 * @description:
 * @email:
 * @author:
 * @createDate: 10:24 2018/6/19
 */
@Configuration
public class ScheduleConfig implements SchedulingConfigurer {


    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    }

}

因为spring的@Scheduled注解支持前一个任务没有执行完是不会再次启动下一次任务的,所以我担心当设置成多线程是会出现混乱的情况,但是我本地测试是没有出现那种情况,@Scheduled还是保持了之前的那种特性。



猜你喜欢

转载自blog.csdn.net/qq_22985751/article/details/80728986