springboot中的定时任务

本文介绍了三种在Java中实现定时任务的方法:使用Java自带的Timer类,利用SpringBoot的@EnableScheduling注解配合@Scheduled注解,以及通过Quartz框架与SpringBoot的集成。每种方法都有其特点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种使用Java自带的定时任务:

public class TestTimer { 
public static void main(String[] args) { 

   TimerTask timerTask = new TimerTask() 
   { @Override 
     public void run() { 
    System.out.println("task  run:"+ new Date()); } }; 
    Timer timer = new Timer(); 
    //开始执行
    timer.schedule(timerTask,10,3000); 
} 
}

第二种使用springboot自己的定时任务:

第一步在 SpringApplication主类上加

@EnableScheduling注解

第二步:自定义,一个类 并写一个方法,在你想要定时的方法上使用

@Scheduled(fixedDelay = 1000*60*120)注解即可

注意:自定义的方法需要使用@Component注解将其交予容器管理,否则定时任务不生效

第三种使用quartz框架与springboot集成:

quartz是一个简单易用但功能强大的任务调度框架 ,在springboot中使用它首先需要在maven中导入quartz包

 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
            <version>2.0.5.RELEASE</version>
        </dependency>

第一步使用javaconfig去配置bean

因为springboot主类本身就是一个javaconfig所以我就在主类上配置bean

quartz关键点有job(实际执行的类),jobDetail(用于对执行对象的描述配置),trigger(如何去执行job),schedua(真正去执行job)r这四大组件:

创建一个job类并写一个需要执行定时任务的方法(简单省略了)

配置jobDetail bean:

/**
     *
     * 如果job只是普通类使用该bean
     *
     * @return the method invoking job detail factory bean
     */
    @Bean
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(){
       MethodInvokingJobDetailFactoryBean detailFactoryBean =new MethodInvokingJobDetailFactoryBean();
       //定时任务类
       detailFactoryBean.setTargetObject(new SystemInfolJob());
       //定时任务执行方法
       detailFactoryBean.setTargetMethod("getInfo");
       //不让其并非执行
       detailFactoryBean.setConcurrent(false);
        return detailFactoryBean;
    }

 /**
     * 如果Job实现了job接口使用该bean
     *
     * @return the job detail factory bean
     */
    @Bean
    public JobDetailFactoryBean jobDetailFactoryBean (){
        JobDetailFactoryBean jobDetailFactoryBean =new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(SimpleJob.class);
        return  jobDetailFactoryBean;
    }

配置Trigger bean(springboot提供多种trigger):

@Bean
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
        SimpleTriggerFactoryBean simpleTriggerFactoryBean =new SimpleTriggerFactoryBean();
        simpleTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        simpleTriggerFactoryBean.setStartDelay(0);
        simpleTriggerFactoryBean.setRepeatInterval(2000);
        return simpleTriggerFactoryBean;
    }


    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean detailFactoryBean){
        CronTriggerFactoryBean cronTriggerFactoryBean =new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setJobDetail(detailFactoryBean.getObject());
        cronTriggerFactoryBean.setCronExpression("0/1 * * * * ? ");
        return  cronTriggerFactoryBean;
    }

配置Scheduler

 @Bean
    public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean,SimpleTriggerFactoryBean simpleTriggerFactoryBean){
        SchedulerFactoryBean factoryBean =new SchedulerFactoryBean();
        factoryBean.setTriggers(cronTriggerFactoryBean.getObject());
        return factoryBean;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值