Não consigo ler as configurações do PropertyPlaceholderConfigurer do Spring

5 respostas
Bruno_Gambier

Pessoal.

Defini no meu applicationContext abaixo um bean para inicialização do meu placeholder conforme exemplo abaixo, mas no bean dataSource não estou conseguindo ler as variáveis do placeholder pois ele está interpretando as variáveis como string e está dando o erro também postado abaixo, poderiam me dar uma dica de como resolver este problema?
Muito obrigado.

ApplicationContext

<?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:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">


	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.user}" />
		<property name="password" value="${jdbc.password}" />
	</bean>

	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
		<property name="dataSource" ref="dataSource" />
	</bean>
		
	[b]<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:properties/jdbc.properties" />
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreUnresolvablePlaceholders" value="true" />
		<property name="order" value="1" />
	</bean>[/b]

	<bean id="lobHandler" class="${lob.handler.class}" />

	<bean id="incrementerParent" class="${database.incrementer.class}">
		<property name="dataSource" ref="dataSource" />
		<property name="incrementerName" value="ID" />
	</bean>

</beans>

Erro

3/06/2009 11:38:02 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [data-source-context.xml]
placeholderProperties carregadoorg.springframework.beans.factory.config.PropertyPlaceholderConfigurer@39e5b5
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [data-source-context.xml]: Error setting property values; nested exception is 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 [${jdbc.driver}]

5 Respostas

V

Coloque o bean placeholderProperties por primeiro, ele deve ser o primeiro bean do xml.

Bruno_Gambier

Obrigado pela dica mas, mesmo colocando o bean do placeholder como primeiro não funciona pois o problema é que o bean não está vendo a variável como um ponteiro da memória e sim como apenas uma string, tanto é que o erro Could not load JDBC driver class [${jdbc.driver}] ele está tentando ler literalmente ${jdbc.driver} e não o valor da variável.

Tem alguma idéia de como consigo resolver isso?

ralphsilver

vc setou o driver de conexão com o banco de dados?

ralphsilver
ralphsilver:
vc setou o driver de conexão com o banco de dados?

olha como eu configurei o acesso ao banco com Spring:

<bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="/WEB-INF/jdbc.properties" />
    
    <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
          id="dataSource"
          p:driverClassName="${microsiga.driverClassName}"
          p:password="${microsiga.password}"
          p:url="${microsiga.url}"
          p:username="${microsiga.username}" />
V

tenta assim algum desses

exemplo com o properties no src.

&lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
         &lt;property name="location" value="conf.properties"/&gt;
    &lt;/bean&gt;

exemplo com o properties em uma pasta.

&lt;bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
         &lt;property name="location" value="file:/home/config/configurer.properties"/&gt;
    &lt;/bean&gt;
Criado 23 de junho de 2009
Ultima resposta 24 de jun. de 2009
Respostas 5
Participantes 3