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 3be6b7f7..94cd0c9b 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.ComponentScan.Filter; 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 @@ public @interface EnableJdbcRepositories { */ 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 5fc9f6ca..9f461ec3 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.lang.annotation.Annotation; 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 @@ import org.springframework.util.StringUtils; */ 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 class JdbcRepositoryConfigExtension extends RepositoryConfigurationExtens 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 830f16a1..2c3f002f 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 @@ -134,6 +134,7 @@ public class EnableJdbcRepositoriesIntegrationTests { @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 508ff134..8fb214ca 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 @@ -83,8 +83,8 @@ public class TestConfiguration { return new NamedParameterJdbcTemplate(dataSource); } - @Bean - PlatformTransactionManager transactionManager() { + @Bean(name = "transactionManager") + PlatformTransactionManager defaultTransactionManager() { return new DataSourceTransactionManager(dataSource); }