2015-01-23 2 views
3

У меня есть простой файл свойств в WEB-INF/local.db.properties:значения свойств доступа внутри Spring конфигурационного файла

db.driverClassName=org.postgresql.Driver 
db.url=jdbc:postgresql://localhost:5432/db_name 
db.username=postgres 
db.password=password 

Я пытаюсь получить доступ к этим свойствам внутри моего файла конфигурации Spring (к концу):

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/util 
     http://www.springframework.org/schema/util/spring-util-3.1.xsd 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

<context:component-scan base-package="controllers" /> 

<mvc:annotation-driven/> 
<mvc:default-servlet-handler/> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/tiles-config.xml</value> 
     </list> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/> 
</bean> 

<util:properties id="dbProperties" location="WEB-INF/local.db.properties" /> 
<bean id="dbDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${db.driverClassName}" /> <!--ERROR --> 
    <property name="url" value="${db.url}" /> 
    <property name="username" value="${db.username}" /> 
    <property name="password" value="${db.password}" /> 
</bean> 
</beans> 

Ошибка Could not load JDBC driver class [${db.driverClassName}]. Ошибка для меня довольно понятна - она ​​не пытается искать свойство, просто использует необработанную строку.

Как это исправить?

Это проект Maven 3, Spring 4, Postgresql.

+0

Вы не загружая конфигурационный файл весной. –

+0

@LuiggiMendoza Не могли бы вы рассказать, пожалуйста? Как мне это сделать? – jlars62

ответ

3

Вы не загружаете файл свойств в конфигурации Spring. Добавьте эту строку:

<context:property-placeholder location="classpath:/WEB-INF/local.db.properties"/> 

или

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="/WEB-INF/local.db.properties"/> 
</bean> 

Если у вас есть файл несколько свойств, измените выше конфигурацию:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <!-- locations, not location, check the S at the end --> 
    <property name="locations"> 
     <list> 
      <value> 
       /WEB-INF/local.db.properties 
      </value> 
      <value> 
       <!-- Path of another properties file --> 
      </value> 
     </list> 
    </property> 
</bean> 

Подробнее: PropertySourcesPlaceholderConfigurer

+0

Удивительный, спасибо! Мне пришлось изменить определение bean-компонента на '' (я думаю, так как я использую версию 4), а свойство для '' (вынул 'classpath:'). – jlars62

+0

@ jlars62 спасибо, ответ обновлен. –

+0

Параметр 'location' элемента XML может принимать список загружаемых запятыми файлов. Рекомендуется использовать пространство имен вместо bean, особенно в Spring 4, поскольку оно дает вам свойство PropertySourcesPlaceholderConfigurer вместо 'PropertyPlaceholderConfigurer'. –

-1

Если вы используете Eclipse, попробуйте щелкнуть правой кнопкой мыши по проекту -> Свойства -> Путь сборки Java -> Источник, затем Добавить папку или Источник ссылки в ваши файлы свойств.

+0

Проблема не в том, что файл не находится в пути к классам, проблема связана с конфигурацией Spring. – meskobalazs

Смежные вопросы