簡體   English   中英

在Spring @ContextConfiguration中加載位置的順序

[英]The order of loading locations in Spring @ContextConfiguration

我將以下配置用於數據庫集成測試:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/spring-master.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@Transactional()
public class EmployeeAccessPropertyTest {

spring-master.xml按以下順序加載spring配置文件:

<import resource="classpath:spring/db/dev-datasource-config.xml"/>
<import resource="classpath:spring/db/jpa-config.xml"/>
<import resource="classpath:spring/db/transaction-config.xml"/>
<import resource="classpath:spring/db/component-config.xml"/>

dev-datasource-config.xml定義dataSource並通過liquibase初始化數據庫方案:

<context:property-placeholder location="classpath:db/config/dev-data-access.properties"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
    <property name="dataSource" ref="dataSource" />
    <property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" />
    <property name="dropFirst" value="true" />
</bean>

現在,當我運行測試時,出現以下錯誤:

javax.persistence.PersistenceException: [PersistenceUnit: studentPersistenceUnit] Unable to build EntityManagerFactory
...
Caused by: org.hibernate.HibernateException: Missing table: employees

似乎在初始化entityManagerFactory時未創建表(在jpa-config.xml文件中)。 好的,我首先通過liquibase maven插件生成方案:

mvn initialize liquibase:update

注釋通過Spring上下文生成的以下數據庫方案:

<!--<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">-->
    <!--<property name="dataSource" ref="dataSource" />-->
    <!--<property name="changeLog" value="classpath:db/changelog/db.changelog-master.xml" />-->
    <!--<property name="dropFirst" value="true" />-->
<!--</bean>-->

問題解決了。 我該怎么做才能確保Spring首先加載dev-datasource-config.xml,初始化liquibase bean,然后再加載jpa-config.xml,如下所示:

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      p:dataSource-ref="dataSource"/>

使用spring手冊中所述的'depends-on'屬性:

http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-dependson

例如

<bean id="beanOne" class="ExampleBean" depends-on="manager"/>

<bean id="manager" class="ManagerBean" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM