diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java index 1bd28a47ae..1ad3d6fbda 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java @@ -90,6 +90,8 @@ public class QuartzAutoConfiguration { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setJobFactory(new AutowireCapableBeanJobFactory( this.applicationContext.getAutowireCapableBeanFactory())); + schedulerFactoryBean + .setOverwriteExistingJobs(this.properties.isOverwriteExistingJobs()); if (!this.properties.getProperties().isEmpty()) { schedulerFactoryBean .setQuartzProperties(asProperties(this.properties.getProperties())); @@ -103,8 +105,6 @@ public class QuartzAutoConfiguration { if (this.triggers != null && this.triggers.length > 0) { schedulerFactoryBean.setTriggers(this.triggers); } - schedulerFactoryBean - .setOverwriteExistingJobs(this.properties.isOverwriteExistingJobs()); customize(schedulerFactoryBean); return schedulerFactoryBean; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzProperties.java index 9b7c6d19f0..1151a480ae 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzProperties.java @@ -37,16 +37,16 @@ public class QuartzProperties { */ private JobStoreType jobStoreType = JobStoreType.MEMORY; + /** + * Whether configured jobs should overwrite existing job definitions. + */ + private boolean overwriteExistingJobs = false; + /** * Additional Quartz Scheduler properties. */ private final Map properties = new HashMap<>(); - /** - * Allows to reschedule existing jobs. - */ - private boolean overwriteExistingJobs = false; - private final Jdbc jdbc = new Jdbc(); public JobStoreType getJobStoreType() { @@ -57,14 +57,6 @@ public class QuartzProperties { this.jobStoreType = jobStoreType; } - public Map getProperties() { - return this.properties; - } - - public Jdbc getJdbc() { - return this.jdbc; - } - public boolean isOverwriteExistingJobs() { return this.overwriteExistingJobs; } @@ -73,6 +65,14 @@ public class QuartzProperties { this.overwriteExistingJobs = overwriteExistingJobs; } + public Map getProperties() { + return this.properties; + } + + public Jdbc getJdbc() { + return this.jdbc; + } + public static class Jdbc { private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/quartz/impl/" diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfigurationTests.java index 43e972ff6e..3052eac929 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfigurationTests.java @@ -160,24 +160,17 @@ public class QuartzAutoConfigurationTests { } @Test - public void withOverwriteExistingJobsParameter() { + public void withOverwriteExistingJobs() { this.contextRunner.withUserConfiguration(OverwriteTriggerConfiguration.class) - .withPropertyValues("spring.quartz.overwriteExistingJobs=true", - "test-name=withConfiguredJobAndOverwrittenTrigger") + .withPropertyValues("spring.quartz.overwrite-existing-jobs=true") .run((context) -> { assertThat(context).hasSingleBean(Scheduler.class); Scheduler scheduler = context.getBean(Scheduler.class); - assertThat(scheduler.getJobDetail(JobKey.jobKey("fooJob"))) - .isNotNull(); Trigger fooTrigger = scheduler .getTrigger(TriggerKey.triggerKey("fooTrigger")); assertThat(fooTrigger).isNotNull(); assertThat(((SimpleTrigger) fooTrigger).getRepeatInterval()) .isEqualTo(30000); - Thread.sleep(1000L); - this.output.expect( - containsString("withConfiguredJobAndOverwrittenTrigger")); - this.output.expect(containsString("jobDataValue")); }); } diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index a47237dd60..9882fcf46d 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -146,7 +146,7 @@ content into your application. Rather, pick only the properties that you need. spring.quartz.jdbc.schema=classpath:org/quartz/impl/jdbcjobstore/tables_@@platform@@.sql # Path to the SQL file to use to initialize the database schema. spring.quartz.job-store-type=memory # Quartz job store type. spring.quartz.properties.*= # Additional Quartz Scheduler properties. - spring.quartz.overwriteExistingJobs=false # Whether overwriting existing job definitions is enabled. + spring.quartz.overwrite-existing-jobs=false # Whether configured jobs should overwrite existing job definitions. # REACTOR ({sc-spring-boot-autoconfigure}/reactor/core/ReactorCoreProperties.{sc-ext}[ReactorCoreProperties]) spring.reactor.stacktrace-mode.enabled=false # Whether Reactor should collect stacktrace information at runtime. diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 86831c2375..bd75661aab 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -5996,6 +5996,10 @@ NOTE: By default, the database is detected and initialized by using the standard provided with the Quartz library. It is also possible to provide a custom script by setting the `spring.quartz.jdbc.schema` property. +By default, jobs created by configuration will not overwrite already registered jobs that +have been read from a persistent job store. To enable overwriting existing job definitions +set the `spring.quartz.overwrite-existing-jobs` property. + Quartz Scheduler configuration can be customized by using Quartz configuration properties (`spring.quartz.properties.*`) and `SchedulerFactoryBeanCustomizer` beans, which allow programmatic `SchedulerFactoryBean` customization. @@ -6030,15 +6034,6 @@ in a similar manner, as shown in the following example: } ---- -Jobs created by configuration will not overwrite already registered jobs that have been -read in from a persistent job store. To enable overwriting existing job definitions set -`spring.quartz.overwriteExistingJobs` property: - -[source,properties,indent=0] ----- - spring.quartz.overwriteExistingJobs=true ----- - [[boot-features-integration]]