2015-02-16 3 views
2

Я использую пользовательское управление транзакциями для кэш-памяти (простое HashMap в это время) в приложении весенней загрузки. Приложение уже использует JpaTransactionManager, настроенный магией за @EnableAutoConfiguration. И это проблема, потому что приложение пытается загрузить два PlatformTransactionManager с и бросает: менеджерПользовательское управление транзакциями в приложении весенней загрузки с @EnableAutoConfiguration

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.transaction.PlatformTransactionManager] is defined: expected single matching bean but found 2: cacheTransactionManager,transactionManager. 

Transaction класс:

@Component 
public class KpiCacheTransactionManager extends AbstractPlatformTransactionManager{ 
... 
} 

Мой менеджер транзакций загружается этим классом конфигурации:

@Configuration 
@EnableTransactionManagement 
public class CacheTransactionConfiguration { 

    @Bean(name = "cacheTransactionManager") 
    public PlatformTransactionManager cacheTransactionManager() { 
     return new CacheTransactionManager(); 
    }  
} 

Основное применение выполняется с использованием этой конфигурации:

@Configuration("MyApplication") 
@EnableAutoConfiguration 
@EntityScan("com.foo.bar") 
@EnableJpaRepositories("com.foo.bar") 
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ) 
@ComponentScan("com.foo.bar") 
@ImportResource({...}) 
public class MyApplication extends SpringBootServletInitializer{ 
} 

Я нашел несколько возможных решений (@Primary аннотаций, имена менеджеров, ...), но я не знаю, как установить это на существующей конфигурации с @EnableAutoConfiguration, как переопределить настройки по умолчанию для JpaTransactionManager с моим собственным ,

Env: Java 8, Spring загрузки 1.2.1, 4.1.4 Spring, JPA Spring данные 1.7.2, Hibernate 4.3.7, Apache Tomcat 8.0.15

ответ

1

Это на самом деле ошибка в Spring Framework 4.1 +0,4. Мы скоро выпустим 4.1.5, но в то же время перейдем к 4.1.3.

См. SPR-12577

+0

Благодарим за ответ. Как установить весеннюю версию весенней загрузки? Я попытался установить в в моем pom.xml, как описано здесь: [http://stackoverflow.com/questions/24402073/is-there-a-simple-way-to-use-a- different-spring-version], но приложение все еще работает с версией 4.1.4 (из файла журнала «Работа с Spring Boot v1.2.1.RELEASE, Spring v4.1.4.RELEASE») – Michal

+0

, который работает только в том случае, если вы используете родительский родитель-родитель. Вероятно, вы интегрируете загрузку самостоятельно, используя 'spring-boot-dependencies' в области« import »? Просто добавьте 'spring-framework-bom' с объемом' import' также * до * загрузочного. –

+0

Да с этой настройкой я могу запустить мое приложение с весной 4.1.3, но оно бросает одно и то же исключение. Однако я добавил явное создание компонента JpaTransactionManager для CacheTransactionConfiguration с помощью @Primary, и исключение исчезнет. Теперь у меня проблема с самим транзакционным менеджером - он работает из тестов JUnit (SpringJUnit4ClassRunner), но игнорируется из приложения (методы cacheTransactionManager не вызываются), но это другой вопрос для отдельного потока. – Michal

Смежные вопросы