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:
e.g.
<bean id="beanone" class="examplebean" depends-on="manager"/> <bean id="manager" class="managerbean" />
Comments
Post a Comment