Springboot2.x集成Quartz(2.3.1)持久化数据库(mysql), 以及数据库中无记录问题

集成过程可以参照此文章:https://blog.csdn.net/HXNLYW/article/details/95055601

本文要讲的是在集成过程中一个小问题,集成后添加Job时,数据库中未生成记录问题(无记录)

Springboot应用启动过程中会打印以下内容:

2019-09-24 17:26:07.199  INFO 10996 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler meta-data: Quartz Scheduler (v2.3.1) 'schedulerFactoryBean' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
  Using job-store 'org.springframework.scheduling.quartz.LocalDataSourceJobStore' - which supports persistence. and is not clustered.

问题原因: 如上面打印代码所说,scheduler为开始。虽然添加的Job也能成功执行,但数据库中会无记录,导致持久化失败。

解决方案:在应用启动后执行: scheduler.start();关键代码如下:

    @PostConstruct
    public void startScheduler() {
        try {
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

        可以将上述代码添加到你的QuartzConfig配置类中,也可以添加到自定义的QuartzService实现类中,这两种方式任选其一

        代码如下:

         方法一:


@Configuration
public class QuartzConfig {
    .....
    .....
    ..... //其他代码省略
     @Bean
    public Scheduler scheduler() {
        return schedulerFactoryBean().getScheduler();
    }

    @PostConstruct
    public void startScheduler() {
        try {
            scheduler().start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

        方法二

@Service
public class QuartzServiceImpl implements QuartzService {


    @Autowired
    private Scheduler scheduler;

    @PostConstruct
    public void startScheduler() {
        try {
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Quartz是一种广泛使用的开源调度器,可用于安排和执行重复的任务。它可以持久化数据库以保证调度任务的持久化和可靠性。 要将Quartz持久化数据库,需要配置Quartz的数据存储设置。具体步骤如下: 1. 首先,需要在项目添加Quartz的相关依赖库。 2. 然后,在Quartz的配置文件指定要使用的数据存储方式。这可以通过设置以下属性来完成: ``` org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ ``` 这些属性指定了使用JDBC JobStore来管理Quartz作业,以及使用指定的数据源和表前缀。 3. 接下来,需要在项目配置数据源。这可以通过在项目的配置文件添加以下内容来完成: ``` <bean id="myDS" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/quartz"/> <property name="username" value="root"/> <property name="password" value=""/> <property name="maxActive" value="100"/> <property name="maxIdle" value="30"/> </bean> ``` 这将创建一个基本的数据源,以连接到MySQL数据库,并指定要使用的用户名和密码。 4. 最后,需要在Quartz的配置文件设置以下属性,以启用持久化: ``` org.quartz.jobStore.isClustered = false org.quartz.jobStore.useProperties = false org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` 这些属性将启用持久化,并指定Quartz的一些行为,例如任务执行延迟和驱动程序代理类。 完成上述步骤后,Quartz就会将作业和触发器存储在指定的数据库,以便在应用程序重新启动时继续执行。 ### 回答2: Quartz是一个开源的任务调度框架,可以实现定时任务的管理和执行。对于需要持久化数据库的任务,Quartz提供了一种方便的方式来实现。 首先,我们需要创建一个数据库表来存储Quartz的相关信息,例如任务名称、任务分组、触发器类型、任务描述、触发器表达式等。可以使用SQL脚本来创建这个表,也可以使用Quartz提供的API来自动创建。 在Quartz的配置文件,我们需要指定数据库及相关信息。这个配置文件可以是一个.properties文件或者一个.xml文件。其,我们需要配置数据库的连接信息,例如数据库的URL、用户名和密码。还需要配置Quartz使用的数据库驱动程序。 在任务调度的代码,我们可以使用Quartz提供的API来创建和管理任务。首先,我们需要创建一个Job类来定义要执行的任务。然后,创建一个JobDetail对象,并指定要执行的Job类。接下来,创建一个触发器(Trigger)对象,并设置触发器的相关属性,例如触发时间、重复次数等。 在Quartz的配置文件,我们还可以配置任务调度的相关策略,例如任务调度的线程池大小、任务触发器的优先级、任务的持久化等。通过设置任务的持久化为true,Quartz会将任务的相关信息持久化数据库。 当我们启动Quartz的任务调度器时,Quartz会根据配置的触发器信息,自动调度和执行任务。执行过程Quartz会将任务的相关执行信息存储到数据库。这些信息包括任务的执行时间、执行状态、执行结果等。 通过Quartz持久化功能,我们可以保证即使在应用程序重启或者服务器宕机的情况下,定时任务仍然能够准确地执行。这对于一些重要的定时任务来说非常关键,可以提高系统的可靠性和稳定性。 ### 回答3: Quartz是一个开源的作业调度框架,它允许开发人员在Java应用程序配置和管理作业的执行。Quartz持久化功能允许将作业和调度信息保存到数据库,以确保在应用程序重启或故障恢复后作业可以正确地继续执行。 在Quartz持久化过程,主要涉及到两个核心概念:作业存储和触发器存储。 作业存储是用于存储作业相关信息的数据库表,包括作业名称、作业组、作业类、作业描述等。通过将作业信息存储到数据库,可以确保即使应用程序停止运行,作业的配置信息仍然可以保留。 触发器存储是用于存储触发器相关信息的数据库表,包括触发器名称、触发器组、触发器类型、触发器运行时间等。通过将触发器信息存储到数据库,可以确保触发器的调度信息可以被恢复,从而保证作业能够按照预定的时间和频率执行。 Quartz提供了多种数据库持久化方案,包括使用JDBC进行持久化、使用JPA进行持久化等。开发人员可以根据自己的需求选择最适合的方案进行配置。 此外,Quartz还提供了相应的API和工具,使得将作业和触发器信息持久化数据库变得简单和方便。开发人员可以通过编写代码或者配置文件来实现持久化的相关功能。 总之,Quartz持久化功能可以确保作业和调度信息能够持久保存到数据库,从而保证在应用程序重启或故障恢复后作业可以正确地继续执行。这样可以提高应用程序的可靠性和稳定性,同时也提供了方便的管理和配置方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使马克

写博客不易,客观打赏一下吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值