Merge pull request #23672 from mdeinum
* pr/23572: Polish "Prefer JdbcTransactionManager over DataSourceTransactionManager" Prefer JdbcTransactionManager over DataSourceTransactionManager Closes gh-23672
This commit is contained in:
@@ -30,12 +30,11 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.jdbc.support.JdbcTransactionManager;
|
||||
import org.springframework.transaction.TransactionManager;
|
||||
|
||||
/**
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for
|
||||
* {@link DataSourceTransactionManager}.
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for {@link JdbcTransactionManager}.
|
||||
*
|
||||
* @author Dave Syer
|
||||
* @author Stephane Nicoll
|
||||
@@ -51,13 +50,13 @@ public class DataSourceTransactionManagerAutoConfiguration {
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnSingleCandidate(DataSource.class)
|
||||
static class DataSourceTransactionManagerConfiguration {
|
||||
static class JdbcTransactionManagerConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(TransactionManager.class)
|
||||
DataSourceTransactionManager transactionManager(DataSource dataSource,
|
||||
JdbcTransactionManager transactionManager(DataSource dataSource,
|
||||
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
|
||||
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
|
||||
JdbcTransactionManager transactionManager = new JdbcTransactionManager(dataSource);
|
||||
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager));
|
||||
return transactionManager;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.jdbc.support.JdbcTransactionManager;
|
||||
import org.springframework.transaction.TransactionManager;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -47,7 +47,7 @@ class DataSourceTransactionManagerAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
void transactionManagerWithoutDataSourceIsNotConfigured() {
|
||||
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(DataSourceTransactionManager.class));
|
||||
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(TransactionManager.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -55,8 +55,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
|
||||
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(TransactionManager.class)
|
||||
.hasSingleBean(DataSourceTransactionManager.class);
|
||||
assertThat(context.getBean(DataSourceTransactionManager.class).getDataSource())
|
||||
.hasSingleBean(JdbcTransactionManager.class);
|
||||
assertThat(context.getBean(JdbcTransactionManager.class).getDataSource())
|
||||
.isSameAs(context.getBean(DataSource.class));
|
||||
});
|
||||
}
|
||||
@@ -68,9 +68,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
|
||||
"spring.transaction.rollback-on-commit-failure=true")
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(TransactionManager.class)
|
||||
.hasSingleBean(DataSourceTransactionManager.class);
|
||||
DataSourceTransactionManager transactionManager = context
|
||||
.getBean(DataSourceTransactionManager.class);
|
||||
.hasSingleBean(JdbcTransactionManager.class);
|
||||
JdbcTransactionManager transactionManager = context.getBean(JdbcTransactionManager.class);
|
||||
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(60);
|
||||
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
|
||||
});
|
||||
@@ -93,9 +92,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
|
||||
@Test
|
||||
void transactionWithMultipleDataSourcesAndPrimaryCandidateIsConfigured() {
|
||||
this.contextRunner.withUserConfiguration(MultiDataSourceUsingPrimaryConfiguration.class).run((context) -> {
|
||||
assertThat(context).hasSingleBean(TransactionManager.class)
|
||||
.hasSingleBean(DataSourceTransactionManager.class);
|
||||
assertThat(context.getBean(DataSourceTransactionManager.class).getDataSource())
|
||||
assertThat(context).hasSingleBean(TransactionManager.class).hasSingleBean(JdbcTransactionManager.class);
|
||||
assertThat(context.getBean(JdbcTransactionManager.class).getDataSource())
|
||||
.isSameAs(context.getBean("test1DataSource"));
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user