loading .properties in spring-context.xml and persistence.xml loading .properties in spring-context.xml and persistence.xml xml xml

loading .properties in spring-context.xml and persistence.xml


Rather than using your build to create a prod or dev version of your persistence.xml, just move all property settingsto your spring content.

My persistence.xml is

<?xml version="1.0" encoding="UTF-8"?><persistence    xmlns="http://java.sun.com/xml/ns/persistence"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"    version="1.0">    <persistence-unit name="JPAService" transaction-type="RESOURCE_LOCAL">       </persistence-unit></persistence>

In my spring content, i then use the PropertyPlaceholderConfigurer to read dev/prod property values and set these into theentityManagerFactory bean

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">    <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>        <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>    <bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>        <property name="ignoreResourceNotFound" value="true"/>        <property name="locations">            <list>                <value>classpath:dev.properties</value>            </list>        </property>    </bean>    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">        <property name="driverClassName" value="${datasource.driverClassName}"/>        <property name="url" value="${datasource.url}"/>        <property name="username" value="${datasource.username}"/>        <property name="password" value="${datasource.password}"/>    </bean>    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">         <property name="persistenceXmlLocation" value="classpath:./META-INF/persistence.xml"/>        <property name="persistenceUnitName" value="JPAService"/>        <property name="dataSource" ref="dataSource"/>        <property name="jpaVendorAdapter">             <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">                 <property name="databasePlatform" value="org.hibernate.dialect.OracleDialect"/>                 <property name="showSql" value="true" />                 <property name="generateDdl" value="true"/>            </bean>         </property>        <property name="jpaProperties">                <!-- set extra properties here, e.g. for Hibernate: -->            <props>            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>            </props>        </property>    </bean>    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">        <property name="entityManagerFactory" ref="entityManagerFactory"/>        <property name="dataSource" ref="dataSource"/>    </bean>    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false"/></beans>


You can reference external property files from a Spring bean definition file using a PropertyPlaceholderConfigurer. I don't think that will work for a JPA persistence.xml, although Spring's JPA support allows you to incorporate most, if not all, the content of persistence.xml into the beans file itself, in which case it would work fine.