diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java index 3be6b7f700..94cd0c9b36 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositories.java @@ -27,6 +27,8 @@ import org.springframework.context.annotation.Import; import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean; import org.springframework.data.repository.config.DefaultRepositoryBaseClass; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; /** * Annotation to enable JDBC repositories. Will scan the package of the annotated configuration class for Spring Data @@ -121,4 +123,10 @@ */ String dataAccessStrategyRef() default ""; + /** + * Configures the name of the {@link DataSourceTransactionManager} bean definition to be used to create repositories + * discovered through this annotation. Defaults to {@code transactionManager}. + */ + String transactionManagerRef() default "transactionManager"; + } diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java index 5fc9f6ca1f..9f461ec3c0 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Locale; +import java.util.Optional; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean; @@ -37,6 +38,8 @@ */ public class JdbcRepositoryConfigExtension extends RepositoryConfigurationExtensionSupport { + private static final String DEFAULT_TRANSACTION_MANAGER_BEAN_NAME = "transactionManager"; + /* * (non-Javadoc) * @see org.springframework.data.repository.config.RepositoryConfigurationExtension#getModuleName() @@ -78,6 +81,9 @@ public void postProcess(BeanDefinitionBuilder builder, RepositoryConfigurationSo source.getAttribute("dataAccessStrategyRef") // .filter(StringUtils::hasText) // .ifPresent(s -> builder.addPropertyReference("dataAccessStrategy", s)); + + Optional transactionManagerRef = source.getAttribute("transactionManagerRef"); + builder.addPropertyValue("transactionManager", transactionManagerRef.orElse(DEFAULT_TRANSACTION_MANAGER_BEAN_NAME)); } /** diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java index 138593052e..2256b385cd 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcRepositoriesIntegrationTests.java @@ -133,6 +133,7 @@ static class DummyEntity { @EnableJdbcRepositories(considerNestedRepositories = true, includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = DummyRepository.class), jdbcOperationsRef = "qualifierJdbcOperations", dataAccessStrategyRef = "qualifierDataAccessStrategy", + transactionManagerRef = "transactionManager", repositoryBaseClass = DummyRepositoryBaseClass.class) static class TestConfiguration { diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java index 7e8b1ccd5a..4db3befc8f 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/testing/TestConfiguration.java @@ -81,8 +81,8 @@ NamedParameterJdbcOperations namedParameterJdbcTemplate() { return new NamedParameterJdbcTemplate(dataSource); } - @Bean - PlatformTransactionManager transactionManager() { + @Bean(name = "transactionManager") + PlatformTransactionManager defaultTransactionManager() { return new DataSourceTransactionManager(dataSource); }