DATAJDBC-622 - Support transactionManagerRef in @EnableJdbcRepositories.

Original pull request: #245.
This commit is contained in:
Antoine Sauray
2020-08-26 14:41:32 +02:00
committed by Jens Schauder
parent f23b987642
commit 41c88bcd0c
4 changed files with 17 additions and 2 deletions

View File

@@ -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";
}

View File

@@ -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<String> transactionManagerRef = source.getAttribute("transactionManagerRef");
builder.addPropertyValue("transactionManager", transactionManagerRef.orElse(DEFAULT_TRANSACTION_MANAGER_BEAN_NAME));
}
/**

View File

@@ -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 {

View File

@@ -83,8 +83,8 @@ public class TestConfiguration {
return new NamedParameterJdbcTemplate(dataSource);
}
@Bean
PlatformTransactionManager transactionManager() {
@Bean(name = "transactionManager")
PlatformTransactionManager defaultTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}