Springboot:编写定时任务的2种方式

1.使用@Scheduled注解实现

@AllArgsConstructor
@Slf4j
@Component
public class ScheduledTasks {

	//此处可以注入其他服务

    /**
     "0/5 * *  * * ?"   每5秒触发
	 "0 0/2 * * * ?"    每2分钟执行一次
     "0 0 12 * * ?"    每天中午十二点触发
     "0 15 10 ? * *"    每天早上10:15触发
     "0 15 10 * * ?"    每天早上10:15触发
     "0 15 10 * * ? *"    每天早上10:15触发
     "0 15 10 * * ? 2005"    2005年的每天早上10:15触发
     "0 * 14 * * ?"    每天从下午2点开始到2点59分每分钟一次触发
     "0 0/5 14 * * ?"    每天从下午2点开始到2:55分结束每5分钟一次触发
     "0 0/5 14,18 * * ?"    每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
     "0 0-5 14 * * ?"    每天14:00至14:05每分钟一次触发
     "0 10,44 14 ? 3 WED"    三月的每周三的14:10和14:44触发
     "0 15 10 ? * MON-FRI"    每个周一、周二、周三、周四、周五的10:15触发
     */
    @Scheduled(cron="0 55 23 ? * *")   //每天晚上23点55分触发执行一次
    public void startTask(){
		log.info("任务在执行...");
	}

2.利用线程池ScheduledExecutorService

@Component
@Slf4j
@Order(1)
public class SoftGatewayHeartbeat implements ApplicationRunner {

	//此处可以注入其他服务
	
	@Override
	public void run(ApplicationArguments args) throws Exception {
		ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);

		executorService.scheduleAtFixedRate(new Runnable() {
			@Override
			public void run() {
				log.info("任务在执行...");
			}
		},2,cycle, TimeUnit.SECONDS);
	}
}

利用线程池做定时任务有个问题,就是任务启动时机的问题,案例采用了线程池跟随系统一起启动,类实现了ApplicationRunner接口的run方法,注解的@Order(1)主要用来对多个随系统一起启动的任务进行排序。

一般这种适用于设计一些心跳场景的设计和实现,如虚拟设备上线后,给服务器或主机上报心跳信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
quartz框架是一个开源的Java调度框架,可用于编写定时任务。而Spring Boot是一个用于简化Java应用开发的框架。在将quartz框架与Spring Boot整合时,我们可以通过使用new的方式编写定时任务。 首先,在Spring Boot的主配置类上加上@EnableScheduling注解,以启用定时任务的支持。然后,我们可以创建一个新的类并实现org.springframework.scheduling.annotation.SchedulingConfigurer接口,这个接口提供了定时任务的配置信息。在该类中,我们可以使用@Bean注解来定义一个定时任务,并设置其触发时间、逻辑等。 在定义定时任务的方法上,我们可以使用@Scheduled注解来指定任务的执行方式和触发时间。例如,可以使用@Scheduled(fixedRate = 5000)来表示每隔5秒执行一次该任务,或者使用@Scheduled(cron = "0 0 12 * * ?")来表示每天中午12点执行一次任务。 需要注意的是,在使用new的方式编写定时任务时,我们需要手动将该任务注册到quartz框架中。我们可以在Spring Boot的配置类中通过创建org.springframework.scheduling.quartz.SchedulerFactoryBean对象来获取一个Quartz调度器实例。然后,再使用调度器实例的scheduleJob方法来注册定时任务。 总的来说,通过new的方式编写定时任务的步骤如下: 1. 在Spring Boot的主配置类上加上@EnableScheduling注解,启用定时任务的支持。 2. 创建一个新的类并实现SchedulingConfigurer接口,用于配置定时任务。 3. 在配置类中定义定时任务的方法,并使用@Scheduled注解指定任务的执行方式和触发时间。 4. 在配置类中获取Quartz调度器实例,并使用调度器实例的scheduleJob方法来注册定时任务。 这样,我们就可以使用new的方式编写定时任务,并实现quartz框架与Spring Boot的整合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行云的逆袭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值