持久化配置
在springboot项目中引入quartz依赖之后,默认是将任务和触发器保存在内存中,如果希望将任务和触发器保存在数据库中,只需在 application.yml
添加以下配置:
spring:
quartz:
job-store-type: jdbc
jdbc:
initialize-schema: always #每次启动程序都会将旧的quartz表删除,重新创建,所以我们在第一次启动程序之后,要将这个属性改为"never"
另外,你的springboot项目中一定要有一个配置好的数据源才行,否则连数据源都没有quartz怎么去做持久化呢。
添加了上述配置之后,启动项目,数据库中就会多出11张表了。
这里可能有人会好奇创建这11张表的sql语句是从哪里来的。
我们找到quartz的依赖包,并打开其下面的 jdbcjobstore 包,在这个包的最下面有很多的 .sql文件
这么一看的话就很容易猜测到,quartz会根据数据源中配置的数据库类型来加载对应的.sql文件,并执行其中的建表语句
为Quartz单独配置数据源
有时候我们会希望将quartz的相关表保存在单独的一个数据库中,从而与业务相关的表分开。
办法也很容易,只要加入以下配置就好了
@Configuration
public class JobConfig {
/**
* 为quartz的任务和触发器单独配置一个数据源 @QuartzDataSource注解用于声明quartz使用这个数据源
* @return
*/
@Bean
@QuartzDataSource
public DataSource quartzDataSource() {
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariDataSource.setUsername("root");
hikariDataSource.setPassword("123456");
hikariDataSource.setJdbcUrl("jdbc:mysql://192.168.253.202:3306/db_quartz?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true");
return hikariDataSource;
}
/**
* 为quartz的数据源配置事务管理器 @QuartzTransactionManager注解用于声明quartz使用这个事务管理器
* @param quartzDataSource
* @return
*/
@Bean
@QuartzTransactionManager
public TransactionManager quartzTransactionManager(@Qualifier("quartzDataSource") DataSource quartzDataSource) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(quartzDataSource);
return transactionManager;
}
}