我在将现有的Spring Web应用程序迁移到Spring Boot 1.5.13的过程中遇到了问题。我几乎处理了所有事情,但我无法设法将好的持久性单元注入WebMvcAutoConfiguration。我实际上有3个不同的实体管理器工厂从类路径导入(由3个不同的内部库提供为.xml文件,我无法更改它们)。它们中的每一个都以这种方式分裂:
<sqe-db:jpa-emf database-definition-name="db-name" embedded-datasource="false"/>
和
<bean id="transaction-mnanager-name" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="jpa-lib-name" />
</bean>
目前,tomcat提供了数据源配置,但是我将它们外部化为dev环境的application.properties
迁移后,我没有找到任何方法为WebMvcAutoConfiguration指定正确的bean,这导致以下错误:
Method requestMappingHandlerMapping in org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration required a single bean, but 3 were found:
- jpa-lib1-name1: defined in null
- jpa-lib1-name2: defined in null
- jpa-lib1-name3: defined in null
此时我的目标是实施以下配置:
我的要求是,或多或少: - 尽量减少现有应用程序所需的更改 - 继续使用库提供的.xml
一个简单的选择是使用更现代的注释驱动配置重写配置,但我更愿意坚持现有的实现,这样我就不必在发布新库时更改它。 / p>
如何在不触及现有xml文件的情况下声明@Primary bean?
非常欢迎任何想法或不同的方法
答案 0 :(得分:0)
我将此添加到我的配置类:
@Autowired
@Qualifier("name-of-default-factory")
private EntityManagerFactory entityManagerFactory;
@Bean
@Primary
public EntityManagerFactory getEntityManagerFactory() {
return entityManagerFactory;
}
现在它将正确注入主bean。