Я использую пользовательское управление транзакциями для кэш-памяти (простое 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
Благодарим за ответ. Как установить весеннюю версию весенней загрузки? Я попытался установить в в моем 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
, который работает только в том случае, если вы используете родительский родитель-родитель. Вероятно, вы интегрируете загрузку самостоятельно, используя 'spring-boot-dependencies' в области« import »? Просто добавьте 'spring-framework-bom' с объемом' import' также * до * загрузочного. –
Да с этой настройкой я могу запустить мое приложение с весной 4.1.3, но оно бросает одно и то же исключение. Однако я добавил явное создание компонента JpaTransactionManager для CacheTransactionConfiguration с помощью @Primary, и исключение исчезнет. Теперь у меня проблема с самим транзакционным менеджером - он работает из тестов JUnit (SpringJUnit4ClassRunner), но игнорируется из приложения (методы cacheTransactionManager не вызываются), но это другой вопрос для отдельного потока. – Michal