Allow Quartz property to set the scheduler name
This commit makes sure that "org.quartz.scheduler.instanceName" is honoured if set. Previously, "spring.quartz.scheduler-name" had a default value and was always set. As a result, `SchedulerFactoryBean` did not take the quartz property into account. Closes gh-14243
This commit is contained in:
parent
d10ba39673
commit
8652f40781
|
@ -90,7 +90,9 @@ public class QuartzAutoConfiguration {
|
|||
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
|
||||
schedulerFactoryBean.setJobFactory(new AutowireCapableBeanJobFactory(
|
||||
this.applicationContext.getAutowireCapableBeanFactory()));
|
||||
schedulerFactoryBean.setBeanName(this.properties.getSchedulerName());
|
||||
if (this.properties.getSchedulerName() != null) {
|
||||
schedulerFactoryBean.setSchedulerName(this.properties.getSchedulerName());
|
||||
}
|
||||
schedulerFactoryBean.setAutoStartup(this.properties.isAutoStartup());
|
||||
schedulerFactoryBean
|
||||
.setStartupDelay((int) this.properties.getStartupDelay().getSeconds());
|
||||
|
|
|
@ -41,7 +41,7 @@ public class QuartzProperties {
|
|||
/**
|
||||
* Name of the scheduler.
|
||||
*/
|
||||
private String schedulerName = "quartzScheduler";
|
||||
private String schedulerName;
|
||||
|
||||
/**
|
||||
* Whether to automatically start the scheduler after initialization.
|
||||
|
|
|
@ -504,6 +504,11 @@
|
|||
"level" : "error"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "spring.quartz.scheduler-name",
|
||||
"type": "java.lang.String",
|
||||
"defaultValue": "quartzScheduler"
|
||||
},
|
||||
{
|
||||
"name": "spring.quartz.jdbc.initialize-schema",
|
||||
"defaultValue": "embedded"
|
||||
|
|
|
@ -250,17 +250,14 @@ public class QuartzAutoConfigurationTests {
|
|||
|
||||
@Test
|
||||
public void withCustomConfiguration() {
|
||||
this.contextRunner.withPropertyValues(
|
||||
"spring.quartz.scheduler-name=testScheduler",
|
||||
"spring.quartz.auto-startup=false", "spring.quartz.startup-delay=1m",
|
||||
this.contextRunner.withPropertyValues("spring.quartz.auto-startup=false",
|
||||
"spring.quartz.startup-delay=1m",
|
||||
"spring.quartz.wait-for-jobs-to-complete-on-shutdown=true",
|
||||
"spring.quartz.overwrite-existing-jobs=true").run((context) -> {
|
||||
assertThat(context).hasSingleBean(SchedulerFactoryBean.class);
|
||||
SchedulerFactoryBean schedulerFactory = context
|
||||
.getBean(SchedulerFactoryBean.class);
|
||||
DirectFieldAccessor dfa = new DirectFieldAccessor(schedulerFactory);
|
||||
assertThat(dfa.getPropertyValue("schedulerName"))
|
||||
.isEqualTo("testScheduler");
|
||||
assertThat(schedulerFactory.isAutoStartup()).isFalse();
|
||||
assertThat(dfa.getPropertyValue("startupDelay")).isEqualTo(60);
|
||||
assertThat(dfa.getPropertyValue("waitForJobsToCompleteOnShutdown"))
|
||||
|
@ -270,6 +267,45 @@ public class QuartzAutoConfigurationTests {
|
|||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void schedulerNameWithDedicatedProperty() {
|
||||
this.contextRunner
|
||||
.withPropertyValues("spring.quartz.scheduler-name=testScheduler")
|
||||
.run(assertSchedulerName("testScheduler"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void schedulerNameWithQuartzProperty() {
|
||||
this.contextRunner.withPropertyValues(
|
||||
"spring.quartz.properties.org.quartz.scheduler.instanceName=testScheduler")
|
||||
.run(assertSchedulerName("testScheduler"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void schedulerNameWithDedicatedPropertyTakesPrecedence() {
|
||||
this.contextRunner.withPropertyValues(
|
||||
"spring.quartz.scheduler-name=specificTestScheduler",
|
||||
"spring.quartz.properties.org.quartz.scheduler.instanceName=testScheduler")
|
||||
.run(assertSchedulerName("specificTestScheduler"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void schedulerNameUseBeanNameByDefault() {
|
||||
this.contextRunner.withPropertyValues()
|
||||
.run(assertSchedulerName("quartzScheduler"));
|
||||
}
|
||||
|
||||
private ContextConsumer<AssertableApplicationContext> assertSchedulerName(
|
||||
String schedulerName) {
|
||||
return (context) -> {
|
||||
assertThat(context).hasSingleBean(SchedulerFactoryBean.class);
|
||||
SchedulerFactoryBean schedulerFactory = context
|
||||
.getBean(SchedulerFactoryBean.class);
|
||||
DirectFieldAccessor dfa = new DirectFieldAccessor(schedulerFactory);
|
||||
assertThat(dfa.getPropertyValue("schedulerName")).isEqualTo(schedulerName);
|
||||
};
|
||||
}
|
||||
|
||||
@Import(ComponentThatUsesScheduler.class)
|
||||
@Configuration
|
||||
protected static class BaseQuartzConfiguration {
|
||||
|
|
Loading…
Reference in New Issue