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 e25e23c539..79fa65a4c7 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 @@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; @@ -92,6 +93,7 @@ public class QuartzAutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnSingleCandidate(DataSource.class) + @ConditionalOnProperty(prefix = "spring.quartz", name = "job-store-type", havingValue = "jdbc") protected static class JdbcStoreTypeConfiguration { @Bean @@ -100,13 +102,11 @@ public class QuartzAutoConfiguration { @QuartzDataSource ObjectProvider quartzDataSource, ObjectProvider transactionManager) { return (schedulerFactoryBean) -> { - if (properties.getJobStoreType() == JobStoreType.JDBC) { - DataSource dataSourceToUse = getDataSource(dataSource, quartzDataSource); - schedulerFactoryBean.setDataSource(dataSourceToUse); - PlatformTransactionManager txManager = transactionManager.getIfUnique(); - if (txManager != null) { - schedulerFactoryBean.setTransactionManager(txManager); - } + DataSource dataSourceToUse = getDataSource(dataSource, quartzDataSource); + schedulerFactoryBean.setDataSource(dataSourceToUse); + PlatformTransactionManager txManager = transactionManager.getIfUnique(); + if (txManager != null) { + schedulerFactoryBean.setTransactionManager(txManager); } }; } 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 9ae40661e2..6d8d255afd 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 @@ -102,6 +102,19 @@ class QuartzAutoConfigurationTests { .withPropertyValues("spring.quartz.job-store-type=jdbc").run(assertDataSourceJobStore("dataSource")); } + @Test + void withDataSourceAndInMemoryStoreDoesNotInitializeDataSource() { + this.contextRunner.withUserConfiguration(QuartzJobsConfiguration.class) + .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class)) + .withPropertyValues("spring.quartz.job-store-type=memory").run((context) -> { + JdbcTemplate jdbcTemplate = new JdbcTemplate(context.getBean("dataSource", DataSource.class)); + assertThat(jdbcTemplate.queryForList("SHOW TABLES").stream() + .map((table) -> (String) table.get("TABLE_NAME"))) + .noneMatch((name) -> name.startsWith("QRTZ")); + }); + } + @Test void withDataSourceNoTransactionManager() { this.contextRunner.withUserConfiguration(QuartzJobsConfiguration.class)