Hi all!
I have a problem with PropertyPlaceholderConfigurer usage.
I need to load 2 properties set....the first from properties file and the second from db.
The problem is: to load the properties from db I would use a properties set from property file but I'm receiving an exception.
My config files:
- web.xml
- spring-properties-from-file-context.xmlCode:<!-- SPRING APPLICATION CONTEXT PARAM --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-properties-from-file-context.xml, /WEB-INF/spring-properties-from-db-context.xml, /WEB-INF/spring-all-properties-context.xml, /WEB-INF/spring-service-context.xml </param-value> </context-param>
- /WEB-INF/spring-properties-from-db-context.xmlCode:<!-- PROPERTIES BEAN FROM FILE --> <bean id="rfxPropertiesFromFile" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <value>file:${RFX_HOME}/RFX.properties</value> </property> </bean>
- spring-all-properties-context.xmlCode:<!-- PROPERTIES BEAN FROM DB --> <bean id="rfxPropertiesFromDB" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="properties" ref="rfxCommonsConfigurationFactoryBean"/> </bean> <bean name="rfxCommonsConfigurationFactoryBean" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean"> <constructor-arg ref="rfxDatabaseConfiguration"/> </bean> <bean name="rfxDatabaseConfiguration" class="org.apache.commons.configuration.DatabaseConfiguration"> <constructor-arg> <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" > <value>${database.driver}</value> </property> <property name="url"> <value>${database.url}</value> </property> <property name="username"> <value>${database.username}</value> </property> <property name="password"> <value>${database.password}</value> </property> </bean> </constructor-arg> <constructor-arg index="1" value="UTENTERFX.RFX_PROPERTIES_TABLE"/> <constructor-arg index="2" value="PROPERTY_KEY"/> <constructor-arg index="3" value="PROPERTY_VALUE"/> </bean>
Code:<!-- PROPERTIES BEAN FROM ALL --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="propertiesArray"> <list> <ref bean="rfxPropertiesFromFile"/> <ref bean="rfxPropertiesFromDB"/> </list> </property> </bean>
In the rfxDatabaseConfiguration bean, If I use the correct value for driver, url, etc. it will work fine...but if I use the variables I will receive this exception:
Thanks in advance for any suggestions.Code:2010-05-20 10:30:05,609 WARN [org.apache.commons.configuration.DatabaseConfiguration] Internal error org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${database.driver}' at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1429) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) at org.apache.commons.configuration.DatabaseConfiguration.getConnection(DatabaseConfiguration.java:568) at org.apache.commons.configuration.DatabaseConfiguration.getKeys(DatabaseConfiguration.java:515) at org.apache.commons.configuration.CompositeConfiguration.getKeys(CompositeConfiguration.java:214) at org.apache.commons.configuration.ConfigurationConverter.getProperties(ConfigurationConverter.java:112) at org.springmodules.commons.configuration.CommonsConfigurationFactoryBean.getObject(CommonsConfigurationFactoryBean.java:57) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport$1.run(FactoryBeanRegistrySupport.java:121) at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:116) at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:91) at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1285) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:275) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:269) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1244) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) ................. MORE ..........................
Cheers, Valentina


Reply With Quote