【发布时间】:2014-07-29 15:49:04
【问题描述】:
我正在尝试从数据库加载属性。我在这方面取得了成功。 但现在的问题是,对于 dataSource bean,我想使用占位符。 请查看 applicationProperties.xml 文件,然后就可以了解了:
<!-- Data Source Bean -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
<!-- My Own class for managing properites came from Database -->
<bean class="PropFromDB.PropFromDB.PropertiesUtil" >
<property name="propertiesArray">
<list>
<ref bean="propertiesFromDB" />
</list>
</property>
</bean>
<!-- PropertiesFactoryBean bean -->
<bean id="propertiesFromDB"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties" ref="commonsConfigurationFactoryBean" />
</bean>
<!-- CommonsConfigurationFactoryBean bean -->
<bean id="commonsConfigurationFactoryBean"
class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
<constructor-arg ref="databaseConfiguration"></constructor-arg>
</bean>
<!-- DatabaseConfiguration bean -->
<bean name="databaseConfiguration"
class="org.apache.commons.configuration.DatabaseConfiguration">
<constructor-arg index="0" ref="dataSource" />
<constructor-arg index="1" value="properties" />
<constructor-arg index="2" value="key" />
<constructor-arg index="3" value="value" />
</bean>
以上代码用于从数据库加载属性。现在您可以看到 dataSource bean,使用了一些占位符。所以我在顶部加入了这一行:
<context:property-placeholder location="classpath:databaseForConfiguration.properties"/>
databaseForConfiguration.properties 包含所有必需的属性并且在类路径中:
driverClassName=org.postgresql.Driver
url=jdbc:postgresql://localhost:5432/mydb
username=user
password=pass
但是当我尝试执行时,我得到以下异常:
Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [${driverClassName}]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:108)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:62)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1489)
... 60 more
{url}、{username}、{password} 的类似内容。
很容易理解,要初始化PropertiesUtil bean,首先需要初始化dataSource bean。对于 dataSource bean,必须有本地属性占位符。 在这种情况下,没有得到。
我想要这两样东西,从本地文件加载占位符和也从数据库加载。
请任何人帮我解决这个问题。
提前致谢。
【问题讨论】:
标签: spring