java - Spring/maven多模块项目: NoUniqueBeanDefinitionException

标签 java spring maven spring-mvc

我有一个带有 Spring 的 Maven 多模块项目。我有一个核心项目,其中包含所有数据访问 bean 以及entityManagerFactoryBean。

现在我有另一个 Maven 模块项目,它从核心项目的上下文 xml 文件导入上下文 xml。我尝试通过在 API 项目中指定来覆盖entityManagerFactory bean:

 <beans:bean parent="entityManagerFactory">
    <beans:property name="packagesToScan">
        <beans:array>
            <beans:value>com.blah.data.domains</beans:value>
            <beans:value>com.blah.api.domains</beans:value>
        </beans:array>
    </beans:property>
</beans:bean>

此 Bean 配置位于核心项目中:

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="entityManager"/>
    <property name="packagesToScan" value="com.blah.data.domains" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
        </bean>
    </property>
    <!-- put any ORM specific stuff here -->
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
        </props>
    </property>
</bean>

正如您在 API 项目中所看到的,我将 com.blah.api.domains 添加到 packagesToScan 属性中。问题是我遇到了这个问题:

 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: entityManagerFactory,entityManagerFactory$child#0

最佳答案

不要尝试覆盖 API 模块中的entityManagerFactory,只需在核心模块中放置通配符即可扫描包。

 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="entityManager"/>
    <property name="packagesToScan" value="com.blah.*.domains" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
        </bean>
    </property>
    <!-- put any ORM specific stuff here -->
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
        </props>
    </property>
</bean>

使用 com.blah.*.domains 所有域都将被扫描和加载。

关于java - Spring/maven多模块项目: NoUniqueBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362666/

相关文章:

java - 在命令行中为具有许多库和外部资源的java项目设置类路径

java - 如何锁定两张完整的 Hazelcast map ?

java - CodeCov 找不到报告

java - 数据 JPA - 从存储库中删除实体

java - CSRF token 不是使用 Webflux 生成的

Maven:在 distributionManagement 内部的 POM 中未指定存储库元素?

java - 我们可以通过创建一个对象来调用一个类的所有构造函数吗

java - Spring Security oauth2 客户端 - Twitter 问题

java - Spring和Soap客户端,使用池化吗?

android - 在 artifactory repo 上发布带有 javadocs 的 .aar 文件