java - The order of loading locations in Spring @ContextConfiguration -


i'm using following configuration db integration test:

@runwith(springjunit4classrunner.class) @contextconfiguration(locations = { "classpath:spring/spring-master.xml"}) @transactionconfiguration(transactionmanager = "transactionmanager", defaultrollback = false) @transactional() public class employeeaccesspropertytest { 

spring-master.xml loads spring config files in following order:

<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 defines datasource , initializes db scheme via 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> 

now, when run test, i'm getting following error:

javax.persistence.persistenceexception: [persistenceunit: studentpersistenceunit] unable build entitymanagerfactory ... caused by: org.hibernate.hibernateexception: missing table: employees 

it seems, table not created when entitymanagerfactory initialized (in jpa-config.xml file). ok, generate scheme via liquibase maven plugin first:

mvn initialize liquibase:update 

comment following db scheme generation via spring context:

<!--<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>--> 

and problem gone. can make sure spring first loads dev-datasource-config.xml, initializes liquibase bean , loads jpa-config.xml looks like:

<bean id="entitymanagerfactory"       class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean"       p:datasource-ref="datasource"/> 

use 'depends-on' attribute, described in spring manual:

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

e.g.

<bean id="beanone" class="examplebean" depends-on="manager"/>  <bean id="manager" class="managerbean" /> 

Comments

Popular posts from this blog

.htaccess - First slash is removed after domain when entering a webpage in the browser -

Automatically create pages in phpfox -

c# - Farseer ContactListener is not working -