2009-12-02 15 views
28

एक वसंत-संदर्भ.एक्सएमएल और एक जेपीए persistence.xml में एक .properties फ़ाइल का संदर्भ देने का एक तरीका है?लोडिंग .properties वसंत-context.xml और persistence.xml

मुझे लगता है कि मैंने वसंत संदर्भ फ़ाइलों में इसका एक उदाहरण कहीं देखा है, हालांकि मुझे याद नहीं है कि वह कहां था। शायद कोई यह जानता है? persistence.xml के बारे में मैं वास्तव में अनिश्चित हूं अगर यह बिल्कुल काम करता है।

मेरा उद्देश्य विकास और वितरण कॉन्फ़िगरेशन के बीच कुछ गुणों को बदलना है। मेरे विचार में वर्तमान में टेम्पलेट कॉन्फ़िगरेशन से चींटी के माध्यम से फ़ाइलों में मैन्युअल रूप से सभी गुणों को प्रतिस्थापित करना है। हालांकि ऐसा करने का एक बेहतर तरीका होना चाहिए। :)

उत्तर

16

आप PropertyPlaceholderConfigurer का उपयोग कर वसंत बीन परिभाषा फ़ाइल से बाहरी संपत्ति फ़ाइलों का संदर्भ दे सकते हैं। मुझे नहीं लगता कि यह एक जेपीए persistence.xml के लिए काम करेगा, हालांकि वसंत के जेपीए समर्थन आपको सबसे ज्यादा शामिल करने की इजाजत देता है, अगर सभी नहीं, persistence.xml की सामग्री बीन्स फ़ाइल में स्वयं ही, इस मामले में यह ठीक काम करेगा।

+1

धन्यवाद, के लिए मेरा समाधान मैंने अब Dataource के लिए jdbc.properties के साथ context.xml में PropertyPlaceholderConfigurer का उपयोग किया था। मैंने दोनों फाइलों से हाइबरनेट सामग्री को hibernate.properties में स्थानांतरित कर दिया। वितरण और विकास के लिए उन दो फाइलों को विभिन्न संस्करणों के साथ बदल दिया गया है। हाइबरनेट.प्रोपर्टीज रनटाइम पर ठीक से पता लगाया जाता है, हालांकि हिबर्नैटेटूल चींटी कार्य को बताया जाना चाहिए कि फाइल कहां है, भले ही यह कक्षा में हो। तो अब सब काम कर रहे हैं। :) – subes

38

अपने persistence.xml के प्रोड या 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 का उपयोग देव/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> 
+2

+1 वही था जो मैं ढूंढ रहा था। धन्यवाद! – andyb

+2

उपयोगकर्ता इस उदाहरण का उपयोग करने से पहले थोड़ा सा शोध करना चाहते हैं। DriverManagerDataSource JavaDoc से: "नोट: यह क्लास एक वास्तविक कनेक्शन पूल नहीं है; यह वास्तव में कनेक्शन को पूल नहीं करता है। यह एक पूर्ण मानक इंटरफ़ेस को लागू करने, एक ही मानक इंटरफ़ेस को लागू करने के लिए सरल प्रतिस्थापन के रूप में कार्य करता है, लेकिन प्रत्येक पर नए कनेक्शन बना रहा है कहते हैं। " – spaaarky21

संबंधित मुद्दे