From 07da03457100cf5a087370fd301638483c054c71 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Sun, 19 Jan 2014 14:10:56 +0000 Subject: [PATCH] Allow @EnableTransactionManagement to be supplied by user --- ...rceTransactionManagerAutoConfiguration.java | 10 ++++++++++ .../orm/jpa/HibernateJpaAutoConfiguration.java | 1 - .../orm/jpa/JpaBaseConfiguration.java | 1 + ...ansactionManagerAutoConfigurationTests.java | 18 ++++++++++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java index 090a6c35e4..a6c191de83 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration.java @@ -23,12 +23,15 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; +import org.springframework.transaction.annotation.EnableTransactionManagement; /** * {@link EnableAutoConfiguration Auto-configuration} for @@ -55,4 +58,11 @@ public class DataSourceTransactionManagerAutoConfiguration implements Ordered { return new DataSourceTransactionManager(this.dataSource); } + @ConditionalOnMissingClass(AbstractTransactionManagementConfiguration.class) + @Configuration + @EnableTransactionManagement + protected static class TransactionManagementConfiguration { + + } + } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java index cd895ca9c0..df35c0b9c8 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.java @@ -48,7 +48,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; EnableTransactionManagement.class, EntityManager.class, HibernateEntityManager.class }) @ConditionalOnBean(DataSource.class) -@EnableTransactionManagement @AutoConfigureAfter(DataSourceAutoConfiguration.class) public class HibernateJpaAutoConfiguration extends JpaBaseConfiguration implements BeanClassLoaderAware { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java index ab3a5cc5a6..fde87d6253 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java @@ -139,4 +139,5 @@ public abstract class JpaBaseConfiguration implements BeanFactoryAware, Environm } } + } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java index 5595d8c026..d67a845537 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfigurationTests.java @@ -19,10 +19,9 @@ package org.springframework.boot.autoconfigure.jdbc; import javax.sql.DataSource; import org.junit.Test; -import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -55,4 +54,19 @@ public class DataSourceTransactionManagerAutoConfigurationTests { this.context.getBeanNamesForType(DataSourceTransactionManager.class).length); } + @Test + public void testManualConfiguration() throws Exception { + this.context.register(SwitchTransactionsOn.class, + EmbeddedDataSourceConfiguration.class, + DataSourceTransactionManagerAutoConfiguration.class); + this.context.refresh(); + assertNotNull(this.context.getBean(DataSource.class)); + assertNotNull(this.context.getBean(DataSourceTransactionManager.class)); + } + + @EnableTransactionManagement + protected static class SwitchTransactionsOn { + + } + }