简体   繁体   English

在spring-context.xml和persistence.xml中加载.properties

[英]loading .properties in spring-context.xml and persistence.xml

is there a way to reference a .properties file in a spring-context.xml and a JPA persistence.xml? 有没有办法在spring-context.xml和JPA persistence.xml中引用.properties文件?

I think I've seen somewhere an example of this in spring context files, though I can't remember where that was. 我想我在春天的上下文文件中看到了一个这样的例子,虽然我不记得那是什么。 Maybe someone knows this? 也许有人知道这个? About the persistence.xml I am actually unsure if this works at all. 关于persistence.xml我实际上不确定这是否有效。

My aim is to change some properties between development and distribution configuration. 我的目标是在开发和分发配置之间更改某些属性。 The idea I have currently is to replace all properties manually in the files via ant from a template config. 我目前的想法是通过模板配置中的ant手动替换文件中的所有属性。 Though there should be a better way to do this. 虽然应该有更好的方法来做到这一点。 :) :)

Rather than using your build to create a prod or dev version of your persistence.xml, just move all property settings to your spring content. 不要使用构建来创建persistence.xml的prod或dev版本,只需将所有属性设置移动到spring内容即可。

My persistence.xml is 我的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>

In my spring content, i then use the PropertyPlaceholderConfigurer to read dev/prod property values and set these into the entityManagerFactory bean 在我的spring内容中,然后使用PropertyPlaceholderConfigurer读取dev / prod属性值并将它们设置为entityManagerFactory 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.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>

You can reference external property files from a Spring bean definition file using a PropertyPlaceholderConfigurer . 您可以使用PropertyPlaceholderConfigurer从Spring bean定义文件中引用外部属性文件。 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. 我认为这不适用于JPA persistence.xml,尽管Spring的JPA支持允许您将大多数(如果不是全部)persistence.xml的内容合并到beans文件本身中,在这种情况下它可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM