这是我的配置:
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.PostgreSQLDelegate, Quartz",
["quartz.dataSource.default.provider"] = "Npgsql",
["quartz.dataSource.default.connectionString"] = @"User ID=ttt;Password=xxx;Host=ttt.postgres;Port=5432;Database=ttt;"
Run Code Online (Sandbox Code Playgroud)
例外:
Could not parse property 'dataSource' into correct data type: No writable property 'DataSource' found
我已经尝试不同的事情一个多小时了,文档并没有真正帮助(在示例方面很薄弱),我尝试挖掘 Quartz.Net 源代码,但没有运气:/
我已经在 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) 我有 springBoot 应用程序在多个实例中运行 Quarts (2.3.0),集群模式为 true 。
我已经配置了作业并在每次运行之间提供了 2 秒的延迟。
@Configuration
public class SchedulerConfig {
@Bean
public JobDetail jobDetail() {
return JobBuilder.newJob()
.ofType(BatchTriggerJob.class)
.storeDurably()
.withIdentity("SCHEDULER")
.withDescription("event")
.build();
}
@Bean
public Trigger trigger() {
return TriggerBuilder
.newTrigger()
.forJob(jobDetail())
.withIdentity("BATCH")
.withDescription("SCHEDULER")
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatForever().withIntervalInSeconds(2)
.withMisfireHandlingInstructionIgnoreMisfires())
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
我已启用 DisallowConcurrentExecution
@DisallowConcurrentExecution
public class BatchTriggerJob extends QuartzJobBean {
@Autowired
private SchedulerService schedulerService;
@Override
protected void executeInternal(JobExecutionContext context) {
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
schedulerService.processBatch(); //business logic and may take more than 2 sec
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序.yml
quartz:
job-store-type: …Run Code Online (Sandbox Code Playgroud) 我在 Spring Boot 应用程序中创建了一个 Cron 计划触发器,如下所示,它被完美地触发。问题是,当我更改下面代码中的 Cron 计划表达式并重新启动 Spring Boot 应用程序时,Cron 计划触发器没有更新,并且仍然触发旧的 Cron 计划表达式值。
在检查数据库表时,我发现表 qrtz_cron_triggers 中的记录没有更新。
qrtz_cron_triggers表中的记录是
“quartzScheduler”“Qrtz_NEReportProcessor_Job_Trigger”“默认”“0 30 22?* *”“亚洲/加尔各答”
如何确保在重新启动我的 Spring Boot 应用程序时, cron 计划表达式值得到更新?我的代码如下。
@Bean(name = "nRJobDetail")
public JobDetail nRJobDetail() {
return newJob().ofType(NEReportJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_NEReportProcessor_Job_Detail")).withDescription("Invoke NEReportProcessor Job service...").build();
}
@Bean
public Trigger nRTrigger(@Qualifier("nRJobDetail") JobDetail job) {
return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_NEReportProcessor_Job_Trigger")).withDescription("NEReportProcessor trigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 00 23 ? * *")
)
.build();
}
Run Code Online (Sandbox Code Playgroud) 我将 Quartz 与 Spring Boot 和 postgres 数据库一起使用作为 Quartz 内容的持久存储。我想在控制台中查看 sql 日志,quartz 正在后台执行。我尝试了许多配置属性来启用它,但没有一个起作用。有人可以告诉我如何启用它吗?到目前为止我使用了以下道具:
spring:
quartz:
job-store-type: jdbc
jdbc:
initialize-schema: NEVER
properties:
org:
quartz:
jobStore:
driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
jpa:
show-sql: true
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true
logging:
level:
org:
quartz: DEBUG
hibernate:
SQL: DEBUG
postgres: DEBUG
springframework:
jdbc:
core:
JdbcTemplate: DEBUG
StatementCreatorUtils: TRACE
Run Code Online (Sandbox Code Playgroud) 我们正式支持 Quartz 和 MongoDB 吗?我看到有一个库https://github.com/michaelklishin/quartz-mongodb。但它被提及是因为它不再被维护。在这个阶段,我们的应用程序正在使用 MongoDB,仅适用于 Quartz,不想在我们的项目中添加另一个数据库(MySQL)。请建议是否建议使用两个数据库或者 Quartz 是否支持 MongoDB。
我知道这是征求建议/意见。任何投入都会对我们有很大帮助。
先感谢您!
根据其功能列表 "Quartz可以作为独立程序运行(在自己的Java虚拟机中),通过RMI使用".
但是,我找不到任何文档如何在独立模式下启动它.
"java -jar quartz.jar"没有做任何事情(甚至在mainfest中都没有指定Main-Class).
分发中的所有示例都使用Quartz作为嵌入式库.
那么这是如何工作的呢?
Java EE中的计时器任务不是很舒服.是否有任何util,用cron语法配置定时器,如"0 20 20**"?
我想知道,如果这是一个使用Quartzinside(集群)Java EE应用程序的好方法.根据http://www.prozesse-und-systeme.de/serverClustering.html(德语页面),Quartz和Java EE集群存在限制:
我更喜欢一种更简单的方法来配置计时器服务,而不是Java EE管理的调度程序.
我正在使用Quartz.Net在我的应用程序中安排我的工作.我只是想知道是否可以构建以下场景的CRON表达式:
每天在凌晨2:15到5:20之间
由于禁止注释而导致作业未运行时会发生什么.
在当前运行的实例死后,它是否排队等待运行?它的重复"运行"是否被丢弃,永远不会被再次听到?
我已经尝试过在代码中测试,但是我对语言和库的经验不足导致了一些困难.
quartz-scheduler ×10
java ×7
spring-boot ×5
cron ×3
concurrency ×1
datasource ×1
java-ee-5 ×1
mongodb ×1
quartz ×1
quartz.net ×1
scheduler ×1
scheduling ×1
spring ×1
timer ×1