Merge branch '2.2.x' into 2.3.x
Closes gh-24014
This commit is contained in:
@@ -60,9 +60,11 @@ import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.scheduling.quartz.LocalDataSourceJobStore;
|
||||
import org.springframework.scheduling.quartz.QuartzJobBean;
|
||||
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -136,6 +138,17 @@ class QuartzAutoConfigurationTests {
|
||||
.run(assertDataSourceJobStore("quartzDataSource"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void transactionManagerWithQuartzTransactionManagerUsedWhenMultiplePresent() {
|
||||
this.contextRunner
|
||||
.withUserConfiguration(QuartzJobsConfiguration.class, MultipleTransactionManagersConfiguration.class)
|
||||
.withPropertyValues("spring.quartz.job-store-type=jdbc").run((context) -> {
|
||||
SchedulerFactoryBean schedulerFactoryBean = context.getBean(SchedulerFactoryBean.class);
|
||||
assertThat(schedulerFactoryBean).extracting("transactionManager")
|
||||
.isEqualTo(context.getBean("quartzTransactionManager"));
|
||||
});
|
||||
}
|
||||
|
||||
private ContextConsumer<AssertableApplicationContext> assertDataSourceJobStore(String datasourceName) {
|
||||
return (context) -> {
|
||||
assertThat(context).hasSingleBean(Scheduler.class);
|
||||
@@ -431,6 +444,51 @@ class QuartzAutoConfigurationTests {
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class MultipleTransactionManagersConfiguration extends BaseQuartzConfiguration {
|
||||
|
||||
private final DataSource primaryDataSource = createTestDataSource();
|
||||
|
||||
private final DataSource quartzDataSource = createTestDataSource();
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
DataSource applicationDataSource() {
|
||||
return this.primaryDataSource;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@QuartzDataSource
|
||||
DataSource quartzDataSource() {
|
||||
return this.quartzDataSource;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
PlatformTransactionManager applicationTransactionManager() {
|
||||
return new DataSourceTransactionManager(this.primaryDataSource);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@QuartzTransactionManager
|
||||
PlatformTransactionManager quartzTransactionManager() {
|
||||
return new DataSourceTransactionManager(this.quartzDataSource);
|
||||
}
|
||||
|
||||
private DataSource createTestDataSource() {
|
||||
DataSourceProperties properties = new DataSourceProperties();
|
||||
properties.setGenerateUniqueName(true);
|
||||
try {
|
||||
properties.afterPropertiesSet();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
return properties.initializeDataSourceBuilder().build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class ComponentThatUsesScheduler {
|
||||
|
||||
ComponentThatUsesScheduler(Scheduler scheduler) {
|
||||
|
||||
Reference in New Issue
Block a user