springboot整合quartz示例,任务存储在数据库中
时间: 2023-08-15 07:53:45 浏览: 198
springboot整合quartz,实现数据库方式执行定时任务
5星 · 资源好评率100%
当您需要将Quartz任务存储在数据库中时,可以使用Quartz提供的`JobStoreTX`和`JobStoreCMT`来实现。
首先,您需要在Spring Boot项目中添加以下依赖项:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.2</version>
</dependency>
```
接下来,您需要创建一个Quartz的配置类,用于配置Quartz的相关属性和任务:
```java
@Configuration
public class QuartzConfig {
@Autowired
private DataSource dataSource;
@Autowired
private ApplicationContext applicationContext;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobFactory(springBeanJobFactory());
schedulerFactoryBean.setDataSource(dataSource);
schedulerFactoryBean.setQuartzProperties(quartzProperties());
// 其他配置属性...
return schedulerFactoryBean;
}
@Bean
public SpringBeanJobFactory springBeanJobFactory() {
AutowiringSpringBeanJobFactory jobFactory = new AutowiringSpringBeanJobFactory();
jobFactory.setApplicationContext(applicationContext);
return jobFactory;
}
@Bean
public Properties quartzProperties() {
Properties properties = new Properties();
properties.setProperty("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
properties.setProperty("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
properties.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
properties.setProperty("org.quartz.jobStore.isClustered", "false");
properties.setProperty("org.quartz.jobStore.dataSource", "quartzDataSource");
properties.setProperty("org.quartz.dataSource.quartzDataSource.driver", "org.postgresql.Driver");
properties.setProperty("org.quartz.dataSource.quartzDataSource.URL", "jdbc:postgresql://localhost:5432/quartz");
properties.setProperty("org.quartz.dataSource.quartzDataSource.user", "quartz");
properties.setProperty("org.quartz.dataSource.quartzDataSource.password", "quartz");
properties.setProperty("org.quartz.dataSource.quartzDataSource.maxConnections", "10");
return properties;
}
}
```
然后,您需要创建一个定时任务的类,继承`QuartzJobBean`并实现`executeInternal`方法:
```java
public class MyJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
// 在这里编写定时任务的逻辑
System.out.println("Hello Quartz!");
}
}
```
接下来,您可以在数据库中创建Quartz相关的表。您可以使用Quartz提供的`quartz_tables_postgres.sql`脚本来创建PostgreSQL数据库表。
最后,在您的应用程序中,您可以使用`@Scheduled`注解来触发定时任务:
```java
@Component
public class MyScheduledTasks {
@Scheduled(cron = "0/10 * * * * ?")
public void runJob() {
// 在这里编写定时任务的逻辑
System.out.println("Hello Scheduled Tasks!");
}
}
```
这样,您的定时任务将会存储在数据库中,并由Quartz进行调度执行。希望对您有所帮助!如果还有其他问题,请随时提问。
阅读全文