springboot中的定時任務

第一種使用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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章