首页 > 编程知识 正文

springboot实现定时器,springboot timer定时器

时间:2023-05-05 09:57:49 阅读:209690 作者:230

第一种使用Schedule这个定时器 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies> 先在启动类上加@EnableScheduling开启Schedule定时器

然后写自定义定时任务,每个方法都是一个任务方法上用@Scheduled这个注解,注解里的是表达式,表示多长时间执行一次 在线表达式生成器http://cron.qqe2.com/  可以按自己的想法选择

package com.buba.schedule;import com.buba.mapper.WitkeyDemandApplyMapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Componentpublic class DemandSchedule { @Autowired private WitkeyDemandApplyMapper witkeyDemandApplyMapper; //每天凌晨执行一次 @Scheduled(cron = "0 0 0 * * ? ") public void processUpdateApplyStatus(){ witkeyDemandApplyMapper.updateAllApplyOverdue(); } //一秒一次 @Scheduled(cron = "0/1 * * * * ? ") public void test1(){ System.out.println("一秒一次"); } //两秒一次 @Scheduled(cron = "0/2 * * * * ? ") public void test2(){ System.out.println("两秒一次"); }} 写好后直接启动项目定时器就自己执行了

可以看到三个定时任务都已经执行,并且使同一个线程中串行执行,如果只有一个定时任务,这样做肯定没问题,当定时任务增多,如果一个任务卡死,会导致其他任务也无法执行。 多线程执行
在传统的Spring项目中,我们可以在xml配置文件添加task的配置,而在SpringBoot项目中一般使用config配置类的方式添加配置,所以新建一个AsyncConfig类 @Configuration@EnableAsyncpublic class AsyncConfig {     /*    此处成员变量应该使用@Value从配置中读取     */    private int corePoolSize = 10;    private int maxPoolSize = 200;    private int queueCapacity = 10;    @Bean    public Executor taskExecutor() {        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        executor.setCorePoolSize(corePoolSize);        executor.setMaxPoolSize(maxPoolSize);        executor.setQueueCapacity(queueCapacity);        executor.initialize();        return executor;    }}
@Configuration:表明该类是一个配置类 
@EnableAsync:开启异步事件的支持 然后在定时任务的类或者方法上添加@Async 。最后重启项目,每一个任务都是在不同的线程中

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。