1

PersistenceManagerFactory而不是像这样在我的应用程序中实例化 a :

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);

我想在 Spring 中为依赖注入配置它,如下所示:

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

但我不确定如何传入Propertiesapplication-context.xml不使用 a jdoconfig.xml)。

是否可以application-context.xml将所有这些Properties值传递给自动装配?

4

2 回答 2

3

执行此操作的简单方法是使用<props>元素来指定 Properties 对象及其条目。这在 Spring 参考手册的第 3.4.2.4 节中有描述。

对于更复杂的用例,还有其他选择;例如,有一个属性工厂类可以从多个来源组装一个属性对象。

于 2010-09-19T02:08:27.047 回答
1

要么<props>按照 Stephen C 的建议使用内联块,要么按照 Spring Online Reference 中的建议将属性文件与PropertiesPlaceHolderConfigurer一起使用:

首先注册 PropertyPlaceholderConfigurer:

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

或使用新学校等效快捷方式:

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

这是属性文件的示例内容:

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

以下是您分配属性的方式:

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

示例取自 Spring Reference。这种方法的好处是a)您可以为不同的应用程序上下文重用相同的属性文件,b)对于单元测试,您只需将不同版本的属性放在类路径上(在 src/test/ 中的 maven 场景中)资源而不是 src/main/resources),您无需更改任何其他内容。

您还可以使用属性文件直接配置 LocalPersistenceManagerFactoryBean(请参阅PersistenceManagerFactory setup):

<beans>

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

</beans>
于 2010-09-19T06:48:53.183 回答