springboot定時器的兩種實現方式

一、@Scheduled註解方式實現

  1. 首先有一個springboot項目,然後添加依賴
		<!-- 添加scheduled座標 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
  1. 在含有定時方法的類前添加如下註解
@Configuration
@EnableScheduling
public class TimingTask {
	@Scheduled(fixedRate = 5000)//單位是ms
	private void configureTasks() {
		System.err.println("執行靜態定時任務時間: " + new Date());
	}

	@Scheduled(cron = "0/5 * * * * ?")//表達式見下面
	private void configureTasks2() {
		System.out.println("執行靜態定時任務時間: " + new Date());
	}
}
  • cron表達式解釋
    參考文章:https://blog.csdn.net/weixin_43564627/article/details/93857252
  • 啓動
    在這裏插入圖片描述
  • 控制檯輸出
    在這裏插入圖片描述
    二、quartz定時器實現
    1.普通實現方式
  • job–任務----你要做什麼事
  • trigger–觸發器–你什麼時候去做
  • scheduler–任務調度—你什麼時候需要去做什麼事
    依賴

		<!-- quartz座標 -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency

(1),定義任務類
定義任務類,實現job接口

/*
 * 定義任務類
 * 
 * 
 * */
public class QuartzDemo implements Job {
//任務類觸發時執行的方法
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		System.out.println("Exeute............."+new Date());
	}

(2),創建執行
注意第二步有兩種執行方法,第一種適合定義簡單的定時器,第二種適合較爲複雜的定時器

public class QuartzMain {
	public static void main(String[] args) throws SchedulerException {
		// 1.創建Job對象,你要做什麼事
		JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();
		// 2.創建trigger對象,在什麼時間做
		/*
		 * 簡單的trigger出發時間,通過quartz提供一個方法來完成簡單的重複調用cron trigger按照cron的表達式來給定觸發時間
		 */
		
		
		/*
		 * Trigger trigger =
		 * TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.
		 * repeatSecondlyForever()) .build();
		 */

		Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
				.build();

		// 創建scheduler對象,在什麼時間做什麼事?

		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.scheduleJob(job, trigger);

		// 啓動
		scheduler.start();
	}
}

相關的解釋:

SimpleScheduleBuilder相關接口的解釋:
repeatSecondlyForever():每秒執行一次,一直執行下去
repeatSecondlyForever(5):每5秒執行一次,一直執行下去
RepeatSecondlyForTotalCount (5,9):每9秒執行一次,一共執行5次

(3),執行main方法,即可運行

Exeute.............Sun Mar 29 18:46:04 CST 2020
Exeute.............Sun Mar 29 18:46:06 CST 2020
Exeute.............Sun Mar 29 18:46:08 CST 2020
Exeute.............Sun Mar 29 18:46:10 CST 2020
Exeute.............Sun Mar 29 18:46:12 CST 2020

2,springboot整合quartz
(1),創建一個springboot-maven項目
(2),添加依賴


		<!-- quartz座標 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
		</dependency>

		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		

(3),編寫任務類

/*
 * 任務類
 * 
 * */
public class quartz implements  Job{

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		// TODO Auto-generated method stub
		System.out.println("執行任務==========="+new Date());
	}

(4),編寫配置類


/*
 * quartz的配置類:
 * 
 * */
@Configuration
@EnableScheduling
public class quartzConfig {
	/*
	 * 1. 創建Job對象
	 * */
	@Bean
	public JobDetailFactoryBean  jobDetailFactoryBean() {
		JobDetailFactoryBean factory = new JobDetailFactoryBean();
		//關聯我們自己的任務類
		factory.setJobClass(quartz.class);
		return factory;
	}
	/*
	 * 2.創建trigger對象
	 * 簡單的trigger
	 * */
	@Bean
	public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean  jobDetailFactoryBean) {
		SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
		//關聯JobDetail對象
		factory.setJobDetail(jobDetailFactoryBean.getObject());
		//設置觸發時間,該參數表示執行的一個毫秒數
		factory.setRepeatInterval(2000);
		//設置重複次數
		factory.setRepeatCount(10);
		return factory;
	}
	/*
	 * 3.創建scheduler對象
	 * */
	@Bean
	public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
		SchedulerFactoryBean factory = new SchedulerFactoryBean();
		//關聯trigger
		factory.setTriggers(simpleTriggerFactoryBean.getObject());
		return factory;
	}

(5),右擊啓動

執行任務===========Mon Mar 30 15:07:19 CST 2020
執行任務===========Mon Mar 30 15:07:21 CST 2020
執行任務===========Mon Mar 30 15:07:23 CST 2020
執行任務===========Mon Mar 30 15:07:25 CST 2020
執行任務===========Mon Mar 30 15:07:27 CST 2020
執行任務===========Mon Mar 30 15:07:29 CST 2020
執行任務===========Mon Mar 30 15:07:31 CST 2020

相關的demo見本人上傳的資源

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