我是Groovy和Grails(和Java),我有一个Quartz调度器的工作(代码如下),想知道
1.)如何在第一次调用作业时(或在应用程序启动时,例如在另一个文件中)执行一些初始化工作(检查数据库和初始化局部变量),但如何在此作业中设置计数器变量?
class MyJob {
static triggers = {
simple repeatInterval: 1000l // execute job every 1 second
}
// These need to be initiated (with values from a DB) the first time the job is run:
long myCounter1, myCounter2, myCounter3
def execute() {
if(first time job is run / application startup) {
// get values for counters defined above, from DB
}
// else values should persist from last job run
// Get stuff from database, passing in counter values
}
谢谢
使用@persistJobDataAfterExecution
注释作业,并使用JobDataMap在执行之间存储/检索数据。
import org.quartz.*;
@PersistJobDataAfterExecution
public class ExampleJob {
static triggers = {
simple repeatInterval: 1000l // execute job every 1 second
}
@Override
void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
JobDataMap jobDataMap = jobExecutionContext.jobDetails.jobDataMap
Integer count = jobDataMap.get("count") ?: 0
jobDataMap.put("count", ++count)
}
}
问题内容: 如何保持在unitttest中继承的同一对象内所做的更改? 即:我希望以上两项测试通过 问题答案: 正如一些评论所回响的那样,以这种方式构造测试可能是测试本身的设计缺陷,您应该考虑对其进行重组。但是,如果您要执行此操作,并且依赖于所使用的测试运行程序以字母(看似)顺序执行它们的事实,那么我建议以下内容。 类似于@Matthias所说的,但是对于以后您可能决定从该类继承的情况,我会做不同
问题内容: 有什么方法可以将结果变量保留在内存中,因此我不必每次运行脚本的开头都重新计算它?每次运行脚本时,我都会对数据集(从磁盘上读取)进行一系列(5-10秒)的确切操作。这不会有太大问题,因为我非常擅长使用交互式编辑器在两次运行之间调试代码。但是有时交互功能只是不切实际。 我知道我可以将结果写到磁盘上的文件中,但是如果可能的话,我想避免这样做。这应该是一个解决方案,它在我第一次运行脚本时会生成
我试图设置一个作业在一个用户使用Quartz的时区的特定时间的单一执行。现在,开箱即用,告诉调度器执行时区中的任何内容的唯一方法是通过。对于Coors,我可能会将datetime转换为cron表达式,然后在第一次成功执行后立即停止触发器,但这有点难闻。 谢谢,
我有每天的cron作业,它应该在00:00运行在所有时区,但当应用程序在维护(可能是一两个小时),部分计划的作业丢失。 是否可以运行在维护期间错过的任务? 在Quartz shoutdown之前(从记录): 石英启动后:
如何使用cron表达式实现我想要的内容? 谁能解释一下石英晶体的这种行为? 提前谢了。
假设我想在2020年2月6日13:50运行一次作业。我该怎么做? 通过使用下面的表达式,我可以得出它将在今天13:50运行。但它明年也会运行。但我希望它只运行一次。