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

@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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过在Spring MVC配置文件中添加以下代码实现启动自动执行定时任务: ``` <!-- 定时任务配置 --> <task:scheduler id="scheduler" pool-size="10"/> <task:annotation-driven scheduler="scheduler"/> <!-- 定时任务bean --> <bean id="myTask" class="com.example.MyTask"/> <!-- 定时任务执行器 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5"/> <property name="maxPoolSize" value="10"/> <property name="queueCapacity" value="25"/> </bean> <!-- 定时任务配置 --> <bean id="myTaskScheduler" class="org.springframework.scheduling.support.PeriodicTrigger"> <constructor-arg value="10000"/> </bean> <!-- 定时任务调度器 --> <bean id="myTaskSchedulerFactoryBean" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler"> <property name="poolSize" value="10"/> <property name="threadNamePrefix" value="myTaskScheduler-"/> <property name="awaitTerminationSeconds" value="60"/> <property name="waitForTasksToCompleteOnShutdown" value="true"/> <property name="scheduledExecutor" ref="taskExecutor"/> </bean> <!-- 定时任务注册 --> <bean id="myTaskRegistrar" class="org.springframework.scheduling.annotation.AnnotationAwareBeanPostProcessor"> <property name="scheduler" ref="myTaskSchedulerFactoryBean"/> </bean> ``` 在上述配置中,`myTask`为定时任务的实现类,`myTaskScheduler`为定时任务配置,`myTaskSchedulerFactoryBean`为定时任务调度器,`myTaskRegistrar`为定时任务注册。其中,`myTaskSchedulerFactoryBean`和`myTaskRegistrar`的`poolSize`属性可以根据实际需求进行调整。 在以上配置完成后,只需要在`myTask`中添加定时任务的方法,并在方法上添加`@Scheduled`注解即可实现自动执行定时任务。例如: ``` @Component public class MyTask { @Scheduled(fixedRate = 1000) public void doTask() { // 定时任务执行代码 } } ``` 在上述代码中,`@Scheduled(fixedRate = 1000)`表示每隔1秒执行一次定时任务

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值