做视频网站视频源/百度做广告多少钱一天
本案例实现的功能是双任务同时执行,每个任务每2秒执行一次,任务1从0秒开始执行,每2秒一次,任务2从1秒开始执行,每2秒执行一次,实现交叉执行。当然,如果要设置更多个任务,直接根据注释说明添加更多个任务即可,已经验证过,可以实现。
步骤:
1. pom文件导入Quartz所相关的依赖
<!-- Quartz 坐标 -->
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version><exclusions><exclusion><artifactId>slf4j-api</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions>
</dependency>
<!-- 添加 Scheduled 坐标 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId>
</dependency>
<!-- Sprng tx 坐标 -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId>
</dependency>
2. 创建2个任务类
QuartzDemo //任务类1
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.stereotype.Component;
/*** 定时任务1* @author Administrator*/
@Component
public class QuartzDemo {//编写定时要执行的任务方法,代码写在此方法中。 public void execute() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定时任务,并输出加载的信息System.out.println("定时器1111被触发,时间: "+sdf.format(new Date())); }
}
QuartzDemo2 //任务类2
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.stereotype.Component;
/*** 定时任务2* @author Administrator*/
@Component
public class QuartzDemo2 {编写定时要执行的任务方法,代码写在此方法中。 public void execute() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定时任务,并输出加载的信息System.out.println("定时器2222被触发,时间: "+sdf.format(new Date())); }
}
3. 创建Quartz任务配置管理类 QuartzConfig
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;/*** Quartz 定时任务配置类,负责创建* JobDetail对象* Trigger对象* Scheduler对象 * @author Administrator*/
@Configuration
public class QuartzConfig {// 配置定时任务1 , QuartzDemo q1第一个任务类对象@Bean(name = "j1")public MethodInvokingJobDetailFactoryBean firstJobDetail(QuartzDemo q1) {MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();// 为需要执行的实体类对应的对象jobDetail.setTargetObject(q1); // 需要执行的方法jobDetail.setTargetMethod("execute");return jobDetail;}// 配置触发器1 @Bean(name="t1")public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetail j1) {CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setJobDetail(j1);// 设置触发时间,从0秒开始,每2秒执行一次。factory.setCronExpression("0/2 * * * * ?");return factory;}// 配置定时任务2, QuartzDemo2 q2第二个任务类对象@Bean(name = "j2")public MethodInvokingJobDetailFactoryBean secondJobDetail(QuartzDemo2 q2) {MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();// 为需要执行的实体类对应的对象jobDetail.setTargetObject(q2); // 需要执行的方法jobDetail.setTargetMethod("execute");return jobDetail;}// 配置触发器2@Bean(name = "t2")public CronTriggerFactoryBean cronTriggerFactoryBean2(JobDetail j2) {CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); factory.setJobDetail(j2);// 设置触发时间,从1秒开始,每2秒执行一次。factory.setCronExpression("1/2 * * * * ?");return factory;}// 配置Scheduler任务调度,t1与t2是触发器@Bean(name = "scheduler")public SchedulerFactoryBean schedulerFactory(Trigger t1, Trigger t2) {SchedulerFactoryBean bean = new SchedulerFactoryBean();// 延时启动,应用启动1秒后才启动任务调度bean.setStartupDelay(1);// 注册触发器,可以注册多个,意味着同时调度多个任务。bean.setTriggers(t1, t2);return bean;}
}
4. spring Boot 项目启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
@EnableScheduling //启动定时任务调度
public class SpringBootScheduled3Application {public static void main(String[] args) {SpringApplication.run(SpringBootScheduled3Application.class, args);}@RequestMapping("/")public String index() {return "index Quartz scheduled";}
}
5. 运行效果
定时器1111被触发,时间: 2019-10-11 16:51:36
定时器2222被触发,时间: 2019-10-11 16:51:37
定时器1111被触发,时间: 2019-10-11 16:51:38
定时器2222被触发,时间: 2019-10-11 16:51:39
定时器1111被触发,时间: 2019-10-11 16:51:40
定时器2222被触发,时间: 2019-10-11 16:51:41
定时器1111被触发,时间: 2019-10-11 16:51:42
定时器2222被触发,时间: 2019-10-11 16:51:43
定时器1111被触发,时间: 2019-10-11 16:51:44
定时器2222被触发,时间: 2019-10-11 16:51:45
定时器1111被触发,时间: 2019-10-11 16:51:46
6. 案例下载:https://download.csdn.net/download/dange_h/11852276