загрузка .properties в spring-context.xml и persistence.xml - PullRequest
29 голосов
/ 02 декабря 2009

Есть ли способ ссылки на файл .properties в spring-context.xml и JPA persistence.xml?

Я думаю, что где-то видел пример этого в весенних контекстных файлах, хотя я не могу вспомнить, где это было. Может кто знает это? Насчет persistence.xml Я на самом деле не уверен, работает ли это вообще.

Моя цель - изменить некоторые свойства между конфигурацией разработки и распространения. В настоящее время у меня есть идея заменить все свойства вручную в файлах через ant из шаблона конфигурации. Хотя должен быть лучший способ сделать это. :)

Ответы [ 2 ]

39 голосов
/ 20 октября 2010

Вместо того, чтобы использовать свою сборку для создания версии файла persistence.xml для prod или dev, просто перенесите все настройки свойств к вашему содержанию весны.

Мой файл persistence.xml

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

В моем весеннем контенте я затем использую PropertyPlaceholderConfigurer, чтобы прочитать значения свойств dev / prod и установить их в Бин entityManagerFactory

<?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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://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>
16 голосов
/ 03 декабря 2009

Вы можете ссылаться на внешние файлы свойств из файла определения bean-компонента Spring, используя PropertyPlaceholderConfigurer . Я не думаю, что это будет работать для JPA persistence.xml, хотя поддержка Spring в JPA позволяет вам включать большую часть, если не все, содержимое файла persistence.xml в сам файл beans, в этом случае он будет работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...