yml localcontainerentitymanagerfactorybean example entitymanagerfactory data java xml spring jpa properties

java - localcontainerentitymanagerfactorybean - spring jpa configuration



cargando.properties en spring-context.xml y persistence.xml (2)

¿Hay alguna manera de hacer referencia a un archivo .properties en spring-context.xml y en un archivo JPA persistence.xml?

Creo que he visto en alguna parte un ejemplo de esto en los archivos de contexto de primavera, aunque no recuerdo dónde estaba. Tal vez alguien sabe esto? Acerca de persistence.xml En realidad, no estoy seguro de si esto funciona o no.

Mi objetivo es cambiar algunas propiedades entre la configuración de desarrollo y distribución. La idea que tengo actualmente es reemplazar todas las propiedades manualmente en los archivos a través de una plantilla de configuración. Aunque debería haber una mejor manera de hacer esto. :)


En lugar de utilizar su compilación para crear una versión prod o dev de su persistence.xml, simplemente mueva todas las configuraciones de propiedad a su contenido de primavera.

Mi persistence.xml es

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

En mi contenido de primavera, uso el PropertyPlaceholderConfigurer para leer los valores de la propiedad dev / prod y establecerlos en el bean 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>


Puede hacer referencia a los archivos de propiedad externos desde un archivo de definición de Spring Bean usando un PropertyPlaceholderConfigurer . No creo que funcione para un JPA persistence.xml, aunque el soporte de JPA de Spring te permite incorporar la mayoría, si no todo, el contenido de persistence.xml en el archivo beans, en cuyo caso funcionaría bien.