Pregunta

En lugar de crear instancias de un PersistenceManagerFactory dentro de mi aplicación como esta:

Properties properties = new Properties();
properties.setProperty("javax.jdo.PersistenceManagerFactoryClass",
                "org.datanucleus.jdo.JDOPersistenceManagerFactory");
properties.setProperty("javax.jdo.option.ConnectionDriverName","com.mysql.jdbc.Driver");
properties.setProperty("javax.jdo.option.ConnectionURL","jdbc:mysql://localhost/myDB");
properties.setProperty("javax.jdo.option.ConnectionUserName","login");
properties.setProperty("javax.jdo.option.ConnectionPassword","password");
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);

quiero configurarlo para la inyección de dependencias en la primavera de algo como esto:

<bean id="persistenceManagerFactory" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean" lazy-init="true">
    <property name="persistenceManagerFactoryName" value="transactions-optional" />
</bean>

Pero no estoy seguro de cómo pasar el Properties en el application-context.xml (sin utilizar un jdoconfig.xml).

¿Es posible en el application-context.xml para pasar todos estos valores para Properties Autowiring?

¿Fue útil?

Solución

O bien utilizar un bloque de línea <props> como Stephen C sugirió, o utilizar un archivo de propiedades junto con un PropertiesPlaceHolderConfigurer como se sugiere en la primavera de referencia en línea :

En primer lugar se registra la PropertyPlaceholderConfigurer:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations"
        value="classpath:com/foo/jdbc.properties"/>
</bean>

o utilice el acceso equivalente de la nueva escuela:

<context:property-placeholder
    location="classpath:com/foo/jdbc.properties"/>

Este es el contenido de ejemplo para el archivo de propiedades:

jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root

Y aquí es cómo se asignan las propiedades:

<bean id="dataSource" destroy-method="close"
    class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
</bean>

ejemplos se toman de la Referencia de primavera. Lo bueno de este enfoque es que a) se puede volver a utilizar el mismo archivo de propiedades para diferentes contextos de aplicación, b) para las pruebas unitarias, que acaba de poner una versión diferente de las propiedades en la ruta de clase (en un escenario experto en src / test / recursos en lugar de src / main / resources) y usted no tiene que cambiar nada más.

También puede configurar el LocalPersistenceManagerFactoryBean directamente con un archivo de propiedades (ver PersistenceManagerFactory configuración ):

<beans>

  <bean id="myPmf" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
    <property name="configLocation" value="classpath:kodo.properties"/>
  </bean>

</beans>

Otros consejos

La forma más sencilla de hacer esto es utilizar el elemento <props> para especificar el objeto Properties y sus entradas. Esto se describe en Sección 3.4.2.4 de la primavera de Referencia Manual.

Existen otras alternativas para los casos de uso más complicado; p.ej. hay una clase de propiedades fábrica que puede montar un objeto Properties desde múltiples fuentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top