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见本人上传的资源

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