Improve transaction manager detection

Switch the condition used to trigger the creation of a transaction
manager from the default name to the actual type.

Fixes gh-3012
pull/2849/merge
Stephane Nicoll 10 years ago
parent bd6f7a589c
commit b8106ae773

@ -1,5 +1,5 @@
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
* {@link DataSourceTransactionManager}.
*
* @author Dave Syer
* @author Stephane Nicoll
*/
@Configuration
@ConditionalOnClass({ JdbcTemplate.class, PlatformTransactionManager.class })
@ -51,7 +52,7 @@ public class DataSourceTransactionManagerAutoConfiguration implements Ordered {
private DataSource dataSource;
@Bean
@ConditionalOnMissingBean(name = "transactionManager")
@ConditionalOnMissingBean
@ConditionalOnBean(DataSource.class)
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource);

@ -1,5 +1,5 @@
/*
* Copyright 2012-2014 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,17 +20,22 @@ import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link DataSourceTransactionManagerAutoConfiguration}.
*
* @author Dave Syer
* @author Stephane Nicoll
*/
public class DataSourceTransactionManagerAutoConfigurationTests {
@ -67,9 +72,32 @@ public class DataSourceTransactionManagerAutoConfigurationTests {
assertNotNull(this.context.getBean(DataSourceTransactionManager.class));
}
@Test
public void testExistingTransactionManager() {
this.context.register(SwitchTransactionsOn.class,
TransactionManagerConfiguration.class,
EmbeddedDataSourceConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class);
this.context.refresh();
assertEquals("No transaction manager should be been created", 1,
this.context.getBeansOfType(PlatformTransactionManager.class).size());
assertEquals("Wrong transaction manager", this.context.getBean("myTransactionManager"),
this.context.getBean(PlatformTransactionManager.class));
}
@EnableTransactionManagement
protected static class SwitchTransactionsOn {
}
@Configuration
protected static class TransactionManagerConfiguration {
@Bean
public PlatformTransactionManager myTransactionManager() {
return mock(PlatformTransactionManager.class);
}
}
}

Loading…
Cancel
Save