服务启动执行任务,定时任务执行

@EnableScheduling
@Configuration
@Slf4j
public class Myjob implements ApplicationRunner,ApplicationListener,InitializingBean {

// 线程安全
public AtomicReference<Map<String, Object>> mapAtomicReference = new AtomicReference<>();
// 顺序 PostConstruct-->InitializingBean-->onApplicationEvent(执行多次,不建议使用)-->run
//3.添加定时任务
@Scheduled(cron = "0 0/1 * * * ?")
public void configureTasks() {
    log.info("我是定时任务的数据 " + LocalDateTime.now());
}
// 定时任务
@Override
public void run(ApplicationArguments args) throws Exception {
    log.info("run--我是启动加载的数据 " + LocalDateTime.now());
    ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1, new ThreadFactory() {
        @Override
        public Thread newThread(Runnable r) {
            return new Thread(r, "定时任务");
        }
    });
    loadConfig();
    // scheduleAtFixedRate:是以period为间隔来执行任务的,如果任务执行时间小于period,则上次任务执行完成后会间隔period后再去执行下一次任务;但如果任务执行时间大于period,则上次任务执行完毕后会不间隔的立即开始下次任务
    scheduledThreadPoolExecutor.scheduleAtFixedRate(this::loadConfig,10,10, TimeUnit.SECONDS);
    // scheduleWithFixedDelay 是不管任务执行多久,都会等上一次任务执行完毕后再延迟delay后去执行下次任务
    scheduledThreadPoolExecutor.scheduleWithFixedDelay(this::loadConfig,10,10, TimeUnit.SECONDS);
}

@PostConstruct
public void load(){
    log.info("PostConstruct--我是启动加载的数据 " + LocalDateTime.now());
}

@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
    log.info("onApplicationEvent--我是启动加载的数据 " + LocalDateTime.now());
}

@Override
public void afterPropertiesSet() throws Exception {
    log.info("InitializingBean--我是启动加载的数据 " + LocalDateTime.now());
}

public void loadConfig(){
    // 加载的配置配置项
    mapAtomicReference.set(new HashMap<>());
    log.info("loadConfig--定时任务" );
}

}

1.springboot服务启动,bean初始化调用的方法,

实现了一系列aware接口的,比如BeanNameAwareApplicationContextAware,调用其set方法
BeanPostProcessor的postProcessBeforeInitialization方法

@PostConstruct 

InitializingBean:每一个Bean实例初始化完成之后进行调用afterPropertiesSet

SmartInitializingSingleton :每一个非惰性单实例Bean实例初始化完成之后进行调用 afterSingletonsInstantiated

SmartLifecycle 在容器所有bean加载和初始化完毕执行  bean的初始化方法和销毁方法是Bean生命周期级别的;而Lifecycle是容器生命周期级别的。

ApplicationRunner: spring容器启动完成之后,就会紧接着执行这个接口实现类的run方法。
ApplicationListener:可以监听某个事件event
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值