标签: quartz-scheduler

Quartz调度器:JOB执行多次

我正在使用石英调度程序来安排我的工作。我用过CronTrigger。但问题是触发器会被多次触发。这是我设置 cron 调度程序的代码..

SchedulerFactory schFactory = new StdSchedulerFactory();
        Scheduler sched = null;
        CronTrigger cronTrigger = null;
        try {
            sched = schFactory.getScheduler();
            JobDetail jobDetail = new JobDetail("job1", "group1",SchedulerPBGC.class);

            String cronTimerStr = "* 16 15 * * ? *";

            LOG.warn("CRON TRIGGER FORMAT  FOR PROCESSING PB GC DATA:"+cronTimerStr);

            cronTrigger = new CronTrigger("SchedTrigger", "Group1", cronTimerStr);


            sched.scheduleJob(jobDetail, cronTrigger);          
            sched.start();

            LOG.warn("SCHEDULER REGISTERED FOR PROCESSING PB GC DATA :  TIME :"+cronTimerStr);          

        } catch (SchedulerException se) {
            LOG.error("SchedulerException Message::"+se.getLocalizedMessage());     
        }
Run Code Online (Sandbox Code Playgroud)

这里我的调度程序执行了作业 10 次...在这里你可以看到日志..

2012-06-20 15:16:50,001 DefaultQuartzScheduler_Worker-1 WARN  test.SchedulerPBGC …
Run Code Online (Sandbox Code Playgroud)

quartz-scheduler

5
推荐指数
1
解决办法
4804
查看次数

JDBC 作业存储未在 Quartz 中启动

我使用quartz来调度我的作业,当我使用RAM作业存储时,调度程序启动并成功触发,但当我使用JDBC存储时,它无法启动。你能指导一下吗,我已经放置了以下文物,

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 2
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.misfireThreshold: 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

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_
org.quartz.dataSource.myDS.driver = org.hsqldb.jdbc.JDBCDriver
org.quartz.dataSource.myDS.URL = jdbc:hsqldb:file:x\\myds
org.quartz.dataSource.myDS.user = SA
org.quartz.dataSource.myDS.password = sa
org.quartz.dataSource.myDS.maxConnections = 30
Run Code Online (Sandbox Code Playgroud)

这些是我的日志...

2014-01-17 11:36:42 INFO  MLog:80 - …
Run Code Online (Sandbox Code Playgroud)

quartz-scheduler

5
推荐指数
1
解决办法
4686
查看次数

Quartz JDBCJobStore与mysql的配置

我是石英新手。我使用 mysql 配置了 jdbcjobstore,配置如下。如果我通过 java 创建调度程序,它工作正常。

# Main Quartz configuration
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = DatabaseClusteredScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = quartzDataSource
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5

# JobStore: JDBC jobStoreTX
org.quartz.dataSource.quartzDataSource.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.quartzDataSource.URL = jdbc:mysql://192.168.1.2:3306/fatdb
org.quartz.dataSource.quartzDataSource.user = root
org.quartz.dataSource.quartzDataSource.password = root
org.quartz.dataSource.quartzDataSource.maxConnections = 8
Run Code Online (Sandbox Code Playgroud)

我的问题是可以将条目(如调度程序、作业和其他信息)直接放在特定的 Quartz 表上,而无需编写程序。

例如,如果我将时间和适当的调度程序详细信息插入石英表中,并且如果我使用上述配置调用侦听器,它可以工作吗?

如果它有效,我需要配置哪些表以及哪些字段。

java quartz-scheduler

5
推荐指数
1
解决办法
8845
查看次数

Quartz JobStoreSupport receiveMisfiredJobs 处理 3 个错过预定触发时间的触发器

我们有一个在其他环境下运行良好的石英应用程序。

但是当我们将它部署在有两个需求的集群环境中时,它就停止工作了。我所能看到的只是下面显示的大量日志。

有什么想法可能导致它吗?我确信这不是我们的代码,因为它从未经过任何任务处理程序。

[7/17/14 13:14:54:236 EDT] 00000025 JobStoreTX    I org.quartz.impl.jdbcjobstore.JobStoreSupport recoverMisfiredJobs Handling 3 trigger(s) that missed their scheduled fire-time.
Run Code Online (Sandbox Code Playgroud)

更新 :

我怀疑这可能是由于事务隔离级别配置所致。当前,quartz 数据源配置为 TRANSACTION_READ_COMMITTED (CS)。关于合适的值有什么建议吗?

TRIGGERS 表也显示它从未被触发:

NEXT_FIRE_TIME PREV_FIRE_TIME 优先事项 触发状态 触发类型 开始时间 时间结束 CALENDAR_NAME 失火_指令
1405630189133 -1 5 等待 克朗 1405624813000 0 0
1405630189139 -1 5 等待 克朗 1405624813000 0 0
1405630215140 -1 5 等待 克朗 1405624813000 0 0
1405630189126 -1 5 等待 克朗 1405624813000 0 0

quartz-scheduler

5
推荐指数
1
解决办法
1万
查看次数

无法使用 SLF4J 禁用石英调度程序日志记录

将quartz-scheduler添加到项目后,Tomcat的服务器日志会收到以下垃圾邮件:

[INFO] [talledLocalContainer] 12:15:06.319 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - 批量获取0个触发器

我正在尝试禁用该日志消息,该消息每 25 秒左右重复一次。我已经回答过同一问题的许多其他答案,例如:

...建议的方法都不起作用。

我在 中声明了以下依赖项pom.xml

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我已将以下log4j.properties设置添加到我的项目中:

log4j.rootLogger=OFF
log4j.logger.quartz=OFF
log4j.logger.o.quartz=OFF
log4j.logger.org.quartz=OFF
Run Code Online (Sandbox Code Playgroud)

...还有以下内容simplelogger.properties

org.slf4j.simpleLogger.defaultLogLevel=error
Run Code Online (Sandbox Code Playgroud)

除了尝试链接答案之一建议的编程解决方案之外,该解决方案还应禁用所有日志记录,大致如下:

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}
Run Code Online (Sandbox Code Playgroud)

这似乎禁用了除了石英运行时的日志消息 之外的所有内容。

有没有办法摆脱quartz 中的日志消息,而不需要修改quartz 源代码来删除它?

java logging slf4j quartz-scheduler maven

5
推荐指数
1
解决办法
5846
查看次数

Quartz Job Scheduler - 多租户设置

由于我还没有找到任何与这相关的东西可以给我带来灵感,所以我想我会在这里提出这个。

我最近对​​Quartz Job Scheduler做了很多工作,我已经在 RESTful Java Servlet 中实现了它,该 Servlet 应该提供基于 Sencha ExtJS 的 UI 用于创建作业。我们将 Authenticator 类与 DatabaseManager 结合使用,负责验证用户和所有其他特定于数据库的内容(使用 Hibernate)。

由于我们希望在我们开发的 Java 企业应用程序中使用它,因此我们需要为每个客户运行这个东西。我们还需要使用 JobStoreTX 在 MySQL 数据库上持久化数据(显然是为了集群),因此易失性 RAMJobStore 实现是一个禁忌。我知道官方文档并且 Quartz 本身似乎不支持多租户实现(请参阅Quartz Clustering)。

我们的设置看起来有点像这样(简化):
- 1+ 生产 Tomcat(提供应用程序逻辑)
- 1+ 生产 Apache(提供 ExtJS 前端和静态内容)
- n 个数据库(每个客户一个)

要添加更棘手的事情:
我们有特定于客户的遗留模块(每个客户都有自己的应用程序托管),而更多最新模块则通过与客户相关的访问进行集中托管。

在我看来,在每个客户数据库上创建 Quartz 相关的表是不够的,因为我们希望坚持简单、直接的设置(这意味着每个客户使用相同的表前缀等)只是为了避免复杂化在整个农场部署石英。

我已经考虑过将它与MariaDB MaxScale结合起来,并使用过滤器基于 RegEx 或类似的东西将 Quartz 路由到每个客户数据库,Quartz 只与 MaxScale 代理通信,但这对于我试图实现的目标来说似乎有点太多的开销我什至不确定这是否有效。

有什么东西可以让我使用 Quartz 进行多租户吗?您能否建议一种方法,使 Quartz 能够处理这个问题,因为我们需要为每个客户运行作业,但在“一个”Tomcat 上(实际上是集群和负载平衡的)?或者是否有其他产品/框架/库支持开箱即用的多租户?

非常感谢任何领导、想法或帮助!

tomcat quartz-scheduler multi-tenant mariadb jakarta-ee

5
推荐指数
1
解决办法
4502
查看次数

将 Quartz 作业定义从 XML 转换为数据源

我目前正在使用 Quartz 来执行作业调度任务,方法是通过文件jobs.xml中的以下行进行配置:quartz.properties

org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
Run Code Online (Sandbox Code Playgroud)

现在,我想将我的工作存储在数据源中。我已将quartz.properties文件更改如下:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
Run Code Online (Sandbox Code Playgroud)

我还在数据库中进行了所有其他配置更改quartz.properties,并使一切正常工作。问题是,我所有的作业和触发器都已写入jobs.xml,我需要以某种方式将它们导入数据库。

我能想到的唯一解决方案是通过 Java 代码创建作业和触发器并重新安排一切。但是,如果有像通过读取jobs.xml文件将所有作业和触发器导入数据库之类的东西,那就太好了。

有谁知道是否有类似的事情?我知道我可以编写一个程序来执行此操作,但如果已经有一个已实现的程序,我仍然想利用它。

谢谢

java quartz-scheduler job-scheduling

5
推荐指数
0
解决办法
303
查看次数

从某个日期开始每天运行的 Cron 表达式

我需要一个 cron 表达式,从 2016 年 1 月 25 日开始,它每天中午 12 点都会触发。这就是我的想法:

0 0 12 25/1 * ? *
Run Code Online (Sandbox Code Playgroud)

但1月31日之后,下一次发射时间是2月25日。

有没有一个 cron 表达式可以做到这一点?如果没有我可以用什么?

cron quartz-scheduler cronexpression

5
推荐指数
1
解决办法
9354
查看次数

Quartz Scheduler:java.lang.IllegalStateException:JobStore 已关闭 - 正在中止重试

我将 JDBC 作业存储与quartz 一起使用,因为在集群环境中管理作业。以下是我使用mysql的jdbc配置:

    #============================================================================
# Configure Main Scheduler Properties
#============================================================================

org.quartz.scheduler.instanceName: MyScheduler
org.quartz.scheduler.instanceId: instance_one

org.quartz.scheduler.skipUpdateCheck: true


#============================================================================
# Configure ThreadPool
#============================================================================

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 5
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure JobStore
#============================================================================

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = quartz_cluster
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true


#============================================================================
# Configure Datasources
#============================================================================

org.quartz.dataSource.quartz_cluster.driver = com.mysql.cj.jdbc.Driver
org.quartz.dataSource.quartz_cluster.URL = jdbc:mysql://localhost:3306/quartz_cluster
org.quartz.dataSource.quartz_cluster.user = root
org.quartz.dataSource.quartz_cluster.password = root
org.quartz.dataSource.quartz_cluster.maxConnections = 5
Run Code Online (Sandbox Code Playgroud)

每当我运行具有上述属性的夸脱时,我的作业就会开始执行,执行 4 次后,我会收到以下异常:

[ERROR] - [2016-09-15 …
Run Code Online (Sandbox Code Playgroud)

java mysql exception quartz-scheduler crontrigger

5
推荐指数
1
解决办法
2758
查看次数

将quartz数据源连接到spring boot bean

我已经在 Spring Boot 中使用 bean 建立了与数据库的连接。这一切在我们的正常应用程序中都可以正常工作。

@Bean(name="MoliDBConfig")
@Primary
public DataSource dataSource() throws SQLException {
Run Code Online (Sandbox Code Playgroud)

我想从quartz 连接到相同的数据源,但收到 JNDI 错误。(顺便说一句,值得注意的是,我已经通过手动提供配置详细信息成功地从quartz连接到数据源。请参阅下面quartz.properties中注释掉的代码。)

2019-03-19T10:51:52.342 + 00:00 [APP / PROC / WEB / 0] [OUT]错误2019-03-19 10:51:52.333 - oquJNDIConnectionProvider 126查找数据源时出错:需要在中指定类名环境或系统属性,或作为小程序参数,或在应用程序资源文件中: java.naming.factory.initial javax.naming.NoInitialContextException:需要在环境或系统属性中指定类名,或作为小程序参数,或在应用程序资源文件:java.naming.factory.initial| 在 javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662) ~[?:1.8.0_202]| 在 javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313) ~[?:1.8.0_202]| 在 javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350) ~[?:1.8.0_202]| 在 javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:1.8.0_202]| 在 org.quartz.utils.JNDIConnectionProvider.init(JNDIConnectionProvider.java:124) [quartz-2.3.0.jar!/:?]| 在 org.quartz.utils.JNDIConnectionProvider.(JNDIConnectionProvider.java:102) [quartz-2.3.0.jar!/:?]| 在 org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:995) [quartz-2.3.0.jar!/:?]| 在 org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1559) [quartz-2.3.0.jar!/:?]| 在 com.xxx.d3.moli.schedule.QrtzScheduler.scheduler(QrtzScheduler.java:52) [类/:?]| 在 com.xxx.d3.moli.schedule.QrtzScheduler$$EnhancerBySpringCGLIB$$aa50aa7b.CGLIB$scheduler$1() [类/:?]| 在 com.xxx.d3.moli.schedule.QrtzScheduler$$EnhancerBySpringCGLIB$$aa50aa7b$$FastClassBySpringCGLIB$$374ea1c1.invoke() [类/:?]| 在 org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) [spring-core-4.3.22.RELEASE.jar!/:4.3.22.RELEASE]| 在 org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) [spring-context-4.3.22.RELEASE.jar!/:4.3.22.RELEASE]| 在 com.xxx.d3.moli.schedule.QrtzScheduler$$EnhancerBySpringCGLIB$$aa50aa7b.scheduler() [类/:?]

石英特性

# Configure …
Run Code Online (Sandbox Code Playgroud)

java datasource quartz-scheduler spring-boot

5
推荐指数
1
解决办法
4353
查看次数