Change Name of Quartz JobDetails



我有一份石英工作:

<bean id="exportResult" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.al6.integration.quartz.JobLauncherDetails"/>
<property name="name" value="TestJob"/>
<property name="durability" value="false"/>
<property name="requestsRecovery" value ="true"/>
<property name="jobDataAsMap">
<map>
<entry key="jobName" value="TestJob" />
</map>
</property>
</bean>

如果我并行地启动这个作业两次,我有这个错误:

org.quartz。ObjectAlreadyExistsException:无法存储作业…因为这个身份已经存在了。

所以我想动态更新作业的名称:

private JobDetail exportResult;

private Trigger trigger;
...
String uniqueID = "TestJob" + UUID.randomUUID().toString();
exportResult.setName(uniqueID);
trigger.setJobName(uniqueID);
scheduler.scheduleJob( exportResult, trigger);

它似乎在远程调试中工作,但当我尝试用maven编译时,它找不到setName方法:

cannot find symbol
[ERROR] symbol:   method setName(java.lang.String)
[ERROR] location: variable exportResult of type org.quartz.JobDetail
cannot find symbol
[ERROR] symbol:   method setJobName(java.lang.String)
[ERROR] location: variable trigger of type org.quartz.Trigger

似乎方法"setName"存在于quart-scheduler版本<2.0.0:

https://javadoc.io/doc/org.quartz-scheduler/quartz/2.0.0/org/quartz/JobDetail.html

https://javadoc.io/doc/org.quartz-scheduler/quartz/1.8.6/org/quartz/JobDetail.html

如何更改名称呢?

Name和Group是只读属性,因为它们是JobKey属性的最后字段(JobDetail.getKey()——>JobKey)

我建议您动态地创建job,这样您就可以保证生成唯一的名称。工厂模式可能很有用。

最新更新