Browse Source

Merge pull request #23672 from mdeinum

* pr/23572:
  Polish "Prefer JdbcTransactionManager over DataSourceTransactionManager"
  Prefer JdbcTransactionManager over DataSourceTransactionManager

Closes gh-23672
pull/23628/head
Stephane Nicoll 5 years ago
parent
commit
9293b2629e
  1. 11
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java
  2. 18
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java

11
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java

@ -30,12 +30,11 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.support.JdbcTransactionManager;
import org.springframework.transaction.TransactionManager; import org.springframework.transaction.TransactionManager;
/** /**
* {@link EnableAutoConfiguration Auto-configuration} for * {@link EnableAutoConfiguration Auto-configuration} for {@link JdbcTransactionManager}.
* {@link DataSourceTransactionManager}.
* *
* @author Dave Syer * @author Dave Syer
* @author Stephane Nicoll * @author Stephane Nicoll
@ -51,13 +50,13 @@ public class DataSourceTransactionManagerAutoConfiguration {
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnSingleCandidate(DataSource.class) @ConditionalOnSingleCandidate(DataSource.class)
static class DataSourceTransactionManagerConfiguration { static class JdbcTransactionManagerConfiguration {
@Bean @Bean
@ConditionalOnMissingBean(TransactionManager.class) @ConditionalOnMissingBean(TransactionManager.class)
DataSourceTransactionManager transactionManager(DataSource dataSource, JdbcTransactionManager transactionManager(DataSource dataSource,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) { ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource); JdbcTransactionManager transactionManager = new JdbcTransactionManager(dataSource);
transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager)); transactionManagerCustomizers.ifAvailable((customizers) -> customizers.customize(transactionManager));
return transactionManager; return transactionManager;
} }

18
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java

@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner; 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 org.springframework.transaction.TransactionManager;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -47,7 +47,7 @@ class DataSourceTransactionManagerAutoConfigurationTests {
@Test @Test
void transactionManagerWithoutDataSourceIsNotConfigured() { void transactionManagerWithoutDataSourceIsNotConfigured() {
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(DataSourceTransactionManager.class)); this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(TransactionManager.class));
} }
@Test @Test
@ -55,8 +55,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class)) this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(TransactionManager.class) assertThat(context).hasSingleBean(TransactionManager.class)
.hasSingleBean(DataSourceTransactionManager.class); .hasSingleBean(JdbcTransactionManager.class);
assertThat(context.getBean(DataSourceTransactionManager.class).getDataSource()) assertThat(context.getBean(JdbcTransactionManager.class).getDataSource())
.isSameAs(context.getBean(DataSource.class)); .isSameAs(context.getBean(DataSource.class));
}); });
} }
@ -68,9 +68,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
"spring.transaction.rollback-on-commit-failure=true") "spring.transaction.rollback-on-commit-failure=true")
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(TransactionManager.class) assertThat(context).hasSingleBean(TransactionManager.class)
.hasSingleBean(DataSourceTransactionManager.class); .hasSingleBean(JdbcTransactionManager.class);
DataSourceTransactionManager transactionManager = context JdbcTransactionManager transactionManager = context.getBean(JdbcTransactionManager.class);
.getBean(DataSourceTransactionManager.class);
assertThat(transactionManager.getDefaultTimeout()).isEqualTo(60); assertThat(transactionManager.getDefaultTimeout()).isEqualTo(60);
assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue(); assertThat(transactionManager.isRollbackOnCommitFailure()).isTrue();
}); });
@ -93,9 +92,8 @@ class DataSourceTransactionManagerAutoConfigurationTests {
@Test @Test
void transactionWithMultipleDataSourcesAndPrimaryCandidateIsConfigured() { void transactionWithMultipleDataSourcesAndPrimaryCandidateIsConfigured() {
this.contextRunner.withUserConfiguration(MultiDataSourceUsingPrimaryConfiguration.class).run((context) -> { this.contextRunner.withUserConfiguration(MultiDataSourceUsingPrimaryConfiguration.class).run((context) -> {
assertThat(context).hasSingleBean(TransactionManager.class) assertThat(context).hasSingleBean(TransactionManager.class).hasSingleBean(JdbcTransactionManager.class);
.hasSingleBean(DataSourceTransactionManager.class); assertThat(context.getBean(JdbcTransactionManager.class).getDataSource())
assertThat(context.getBean(DataSourceTransactionManager.class).getDataSource())
.isSameAs(context.getBean("test1DataSource")); .isSameAs(context.getBean("test1DataSource"));
}); });
} }

Loading…
Cancel
Save