使用quartz是先执行实现类还是先配置配置类
时间: 2024-02-12 18:03:15 浏览: 27
在使用Quartz时,通常需要先配置Quartz的相关参数和属性,然后才能创建并执行Job实现类。
具体来说,创建和配置Quartz调度器的步骤如下:
1. 创建SchedulerFactory实例,通常使用StdSchedulerFactory类来创建,默认会读取classpath下的quartz.properties文件来初始化Quartz的配置参数。
2. 创建Scheduler实例,通过调用SchedulerFactory的getScheduler方法来创建,默认会使用StdScheduler类来创建,它是Quartz Scheduler的标准实现。
3. 创建JobDetail实例,用于定义Job实现类的相关属性,例如Job名称、Job组别、Job类、Job描述等。
4. 创建Trigger实例,用于定义任务的触发时间和执行规则,例如每隔多少时间执行一次、在指定时间执行、按照日历执行等。
5. 将JobDetail和Trigger注册到Scheduler中,通过调用Scheduler的scheduleJob方法来将JobDetail和Trigger关联起来,并注册到Scheduler中。
6. 启动Scheduler,通过调用Scheduler的start方法来启动Scheduler,开始执行任务。
因此,可以看出,配置Quartz调度器是在创建和配置完相关类之后,才能进行Quartz任务的执行。
相关问题
Springboot 配置类 Quartz设置默认启动关闭具体实现
1. 创建 QuartzConfig 配置类
```java
@Configuration
public class QuartzConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(QuartzConfig.class);
private JobFactory jobFactory;
public QuartzConfig(JobFactory jobFactory) {
this.jobFactory = jobFactory;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(jobFactory);
schedulerFactoryBean.setStartupDelay(5);
schedulerFactoryBean.setAutoStartup(true);
schedulerFactoryBean.setApplicationContextSchedulerContextKey("applicationContext");
schedulerFactoryBean.setQuartzProperties(quartzProperties());
LOGGER.info("创建 schedulerFactoryBean 成功");
return schedulerFactoryBean;
}
@Bean
public Properties quartzProperties() {
Properties properties = new Properties();
properties.setProperty("org.quartz.scheduler.instanceName", "MyScheduler");
properties.setProperty("org.quartz.scheduler.instanceId", "AUTO");
properties.setProperty("org.quartz.scheduler.skipUpdateCheck", "true");
properties.setProperty("org.quartz.scheduler.jobFactory.class", "org.quartz.simpl.SimpleJobFactory");
properties.setProperty("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
properties.setProperty("org.quartz.threadPool.threadCount", "10");
properties.setProperty("org.quartz.threadPool.threadPriority", "5");
properties.setProperty("org.quartz.jobStore.misfireThreshold", "60000");
properties.setProperty("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
properties.setProperty("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
properties.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
properties.setProperty("org.quartz.jobStore.isClustered", "true");
properties.setProperty("org.quartz.jobStore.clusterCheckinInterval", "15000");
LOGGER.info("创建 quartzProperties 成功");
return properties;
}
}
```
2. 创建 JobFactory 实现类
```java
@Component
public class QuartzJobFactory extends AdaptableJobFactory {
@Autowired
private ApplicationContext applicationContext;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
Object jobInstance = super.createJobInstance(bundle);
applicationContext.getAutowireCapableBeanFactory().autowireBean(jobInstance);
return jobInstance;
}
}
```
3. 创建 JobDetail 和 Trigger
```java
@Component
public class MyJob {
public void execute() {
System.out.println("任务执行");
}
public JobDetail jobDetail() {
return JobBuilder.newJob(MyJob.class)
.withIdentity("job1", "group1")
.storeDurably()
.build();
}
public Trigger trigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(jobDetail())
.withIdentity("trigger1", "group1")
.withSchedule(scheduleBuilder)
.build();
}
}
```
4. 启动项目
启动项目后,会自动启动 Quartz 定时任务,如果想关闭 Quartz 定时任务,可以在配置文件中设置 autoStartup=false。例如:
```
spring.quartz.auto-startup=false
```
Springboot 配置类 Quartz设置指定任务开关
可以通过在Springboot配置类中添加Quartz相关的bean来设置指定任务的开关。
首先,需要添加Quartz的依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
```
然后,在配置类中添加Quartz的相关bean:
```java
@Configuration
public class QuartzConfig {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build();
}
@Bean
public Trigger trigger() {
return TriggerBuilder.newTrigger().forJob(jobDetail())
.withIdentity("myJobTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?"))
.build();
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobDetails(jobDetail());
schedulerFactoryBean.setTriggers(trigger());
return schedulerFactoryBean;
}
}
```
上述代码中,定义了一个MyJob类,并将其作为一个JobDetail bean注入到Spring容器中。同时,也定义了一个Trigger bean,用于触发MyJob类执行。最后,定义了一个SchedulerFactoryBean bean,将JobDetail和Trigger注入到Quartz的调度器中。
如果要动态调整MyJob的开关状态,可以通过操作SchedulerFactoryBean bean来实现。例如,可以定义一个开关状态的变量,然后在需要关闭MyJob时,将变量设置为false,并调用SchedulerFactoryBean的stop方法停止调度器。反之,当需要开启MyJob时,将变量设置为true,并调用SchedulerFactoryBean的start方法启动调度器即可。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)