- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好,我有两个 quartz 作业实例,我不想并行运行,我简化了下面示例中的代码以显示哪些内容不符合我的预期。
public class QuartzTest {
public static void main( String[] args ) throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
JobDetail job1 = newJob( TestJob.class ).withIdentity( "job1", "group1" ).build();
CronTrigger trigger1 = newTrigger().withIdentity( "trigger1", "group1" ).startAt( new Date() ).withSchedule( cronSchedule( getCronExpression( 1 ) ) ).build();
scheduler.scheduleJob( job1, trigger1 );
JobDetail job2 = newJob( TestJob.class ).withIdentity( "job2", "group1" ).build();
CronTrigger trigger2 = newTrigger().withIdentity( "trigger2", "group1" ).startAt( new Date() ).withSchedule( cronSchedule( getCronExpression( 1 ) ) ).build();
scheduler.scheduleJob( job2, trigger2 );
for ( int i = 0; i < 5; i++ ) {
System.out.println( trigger1.getNextFireTime() );
System.out.println( trigger2.getNextFireTime() );
try {
Thread.sleep( 1 * 60 * 1000 );
} catch ( InterruptedException e ) {
e.printStackTrace();
}
}
}
private static String getCronExpression( int interval ) {
return "0 */" + interval + " * * * ?";
}
}
这是工作类别
@DisallowConcurrentExecution
public class TestJob implements Job {
@Override
public void execute( JobExecutionContext context ) throws JobExecutionException {
System.out.println( "Job started" );
System.out.println( "Job sleeping 30s..." );
try {
Thread.sleep( 30 * 1000 );
} catch ( InterruptedException e ) {
e.printStackTrace();
}
System.out.println( "Job finished." );
}
}
因此,我在这里安排两个作业每分钟运行一次(在实际情况下,一个作业每分钟运行一次,另一个作业每 5 运行一次),这是我得到的输出:
Job started
Job sleeping 30s...
Job started
Job sleeping 30s...
Job finished.
Job finished.
所以两个作业都是并行运行的,因为 job1 在运行之前等待 job2 完成的顺序序列会给我这个序列
Job started
Job sleeping 30s...
Job finished.
Job started
Job sleeping 30s...
Job finished.
那么为什么这没有发生呢?
最佳答案
来自文档:
@DisallowConcurrentExecution:
一种注释,将 Job 类标记为不得同时执行多个实例(其中实例基于 JobDetail 定义 - 或者换句话说基于 JobKey)。
JobKey由名称和组组成
在您的示例中,名称不同,因此这是两个不同的作业。
DisallowConcurrentExecution 确保 job1#thread1 在触发另一个 job1#thread2 之前完成。
关于java - Quartz @DisallowConcurrentExecution 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520618/
我一直在研究一个调度引擎,它从数据库中读取计划作业并安排它们工作正常,但是数据库中的行只是某些类型作业的“配置”,例如: 获取FTP的一定配置有 host: imagineryHost1.com po
我正在使用javaquartz调度。我能够完美地安排作业,但我想要的是在运行第二轮之前等待作业完成,因为运行每个作业所需的时间各不相同。 我使用了@DisallowConcurrentExecutio
您好,我有两个 quartz 作业实例,我不想并行运行,我简化了下面示例中的代码以显示哪些内容不符合我的预期。 public class QuartzTest { public static void
如果这个问题太天真,我很抱歉,我希望安排作业,以便它一个接一个地执行,而不是并行执行。它只执行一次。 从文档来看,@DisallowConcurrentExecution 是 一种注释,将 {@lin
当一个作业因为 disallow 注释而没有运行时会发生什么。 它是否在当前正在运行的实例死亡后排队运行?是否只是丢弃了它的重复“运行”,再也听不到了? 我尝试过在代码中进行测试,但我对语言和库的缺乏
我已经开发了一些执行 quartz 作业的代码。起初代码在 tomcat 之外并且执行得很好,但是当我尝试将相同的代码嵌入到 Web 应用程序中时,我得到了 java.lang.NoClassDefF
请考虑这个例子。 一个示例 Web 应用程序在启动时调用 scheduler.start()。配置为将其作业存储在数据库中的调度程序。 应用程序被复制到六个网络服务器上。 因此,如果我们启动六个网络服
我有一个具有以下定义的 Quartz.net 作业。 [PersistJobDataAfterExecution] [DisallowConcurrentExecution]
如果我使用 JdbcStore 将作业代码部署在两个 JVM 上,@DisallowConcurrentExecution 能否确保所有 JVM 上仅运行一个作业? 最佳答案 是的,会的;这种属性甚至
我是一名优秀的程序员,十分优秀!