quartz整合springboot将定时任务持久化

持久化配置

在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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值