<context:property-placeholder location="classpath*:META-INF/spring/database.properties"/>
Say, for eg, if I had peristenceUnitName as a property loaded in from database.properties, I could use this property to configure my EntityManagerFactory:
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> <property name="dataSource" ref="dataSource"/> <property name="persistenceUnitName" value="${persistenceUnitName}"></property> </bean>
So, now I want to override the name of the persistence unit for running my tests. A reasonable solution would be to define another PropertySourcesPlaceholderConfigurer in the test context with a different value of the "persistenceUnitName", this will work if the test placeholder is loaded up BEFORE the main application context.
A better way to go about doing this is using a local-override flag of property-placeholder tag, what this indicates is that the local properties should have a higher precedence over the one's loaded from the file -
<context:property-placeholder location="classpath*:META-INF/spring/database.properties" local-override="true" properties-ref="localProperties"/> <util:properties id="localProperties"> </util:properties>
I have provided a dummy localProperties above, just as a place holder.
So now, to override the desired properties in test, the only thing that needs to be done is to define a new localProperties bean this way:
<util:properties id="localProperties"> <prop key="persistenceUnitName">TEST-tasksPersitenceUnit</prop> </util:properties>
This I feel is a much cleaner approach to defining placeholder properties that are to be overridden in the tests.
No comments:
Post a Comment