2014-03-06 133 views
1

我試圖在Maven + Spring項目中訪問包含數據庫配置的屬性文件。Spring + Maven屬性文件未加載

我收到以下錯誤:

Cannot load JDBC driver class '${db_driver}'

我的屬性文件放置在src/resources文件夾中。

下面是加載屬性文件標籤:

<bean id="dbPropertyReader" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="1" /> 
     <property name="locations"> 
      <value>classpath:${appenv.deployment}.properties</value> 
     </property> 
    </bean> 

以下標記使用屬性加載:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="url" value="${db_url}" /> 
     <property name="driverClassName" value="${db_driver}" /> 
     <property name="username" value="${db_username}" /> 
     <property name="password" value="${db_password}" /> 
</bean> 

以下是屬性文件內容:

#JDBC Properties 
db_driver=com.mysql.jdbc.Driver 
db_url=jdbc\:mysql\://hostname\:3306/xxx_dbxxx?useUnicode\=true 
db_username=abcdefgh 
db_password=ijklmnopq 
db_removeabadoned=true 
db_initialsize=1 
db_maxactive=2 

${appenv.deployment}是VMA參數設置如下:

-Dappenv.deployment=development 

我檢查過,這個值正在填充正確。

我得到下面這行日誌:

Found key 'appenv.deployment' in [systemProperties] with type [String] and value 'development'

然後在此之後,我也越來越如下:

Loading properties file from class path resource [development.properties]

但一些如何,這些值都沒有得到加載。

彈簧Datasource.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="dbPropertyReader" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="1" /> 
     <property name="locations"> 
      <value>classpath:${appenv.deployment}.properties</value> 
     </property> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="url" value="${db_url}" /> 
     <property name="driverClassName" value="${db_driver}" /> 
     <property name="username" value="${db_username}" /> 
     <property name="password" value="${db_password}" /> 
     <property name="initialSize" value="${db_initialsize}" /> 
     <property name="maxActive" value="${db_maxactive}" /> 
    </bean> 

    <bean id="firstConfigDataFromDB" class="org.apache.commons.configuration.DatabaseConfiguration"> 
     <constructor-arg type="javax.sql.DataSource" ref="dataSource" /> 
     <constructor-arg index="1" value="tablename1" /> 
     <constructor-arg index="2" value="propertyname2" /> 
     <constructor-arg index="3" value="propertyvalue2" /> 
    </bean> 

    <bean id="firstConfigDataFromDBFactory" 
     class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean"> 
     <constructor-arg ref="firstConfigDataFromDB" /> 
    </bean> 

    <!-- DB Properties Initialization --> 

    <bean id="firstConfigurationPlaceHolder" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="order" value="2" /> 
     <property name="ignoreUnresolvablePlaceholders" value="false"/> 
     <property name="properties" ref="firstConfigDataFromDBFactory" /> 
    </bean> 

    <bean id="secondConfigurationFromDB" 
     class="org.apache.commons.configuration.DatabaseConfiguration"> 

     <constructor-arg type="javax.sql.DataSource" ref="dataSource" /> 
     <constructor-arg index="1" value="tablename2" /> 
     <constructor-arg index="2" value="propertyname2" /> 
     <constructor-arg index="3" value="propertyvalue2" /> 
    </bean> 

    <bean id="secondConfigurationFromDBFactory" 
     class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean"> 
     <constructor-arg ref="secondConfigurationFromDB" /> 
    </bean> 

    <!-- 
    Error Map Initialization 
    Subtype of org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 
    --> 

    <bean id="secondConfigurationPlaceHolder" 
     class="com.application.SecondConfigurationPlaceHolder"> 
     <property name="order" value="3" /> 
     <property name="ignoreUnresolvablePlaceholders" value="false"/> 
     <property name="properties" ref="secondConfigurationFromDBFactory" /> 
    </bean> 

</beans> 

Generic.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" 
> 
    <!-- Enable annotation scanning --> 
    <context:annotation-config/> 
    <!-- Initialise connection to Database --> 
    <import resource="Spring-Datasource.xml"/> 
    <!-- Initialize mail connection --> 
    <import resource="Spring-Mail.xml"/> 
    <!-- Inject database connection to DAO --> 
    <import resource="Spring-DAO.xml"/> 

    <!-- Other Beans Below --> 

</beans> 

的applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" 
> 
    <import resource="generic.xml" /> 

    <bean id="applicationBean" class="com.application.ApplicationBean" scope="singleton" > 
     <property .. /> 
     <property .. /> 
    </bean> 

</beans> 

我加載applicationContext.xml與下面的語句代碼:

`appContext = new ClassPathXmlApplicationContext("applicationContext.xml");` 
  • 的applicationContext.xml imports generic.xml。

  • generic.xml imports Spring-DataSource.xml。

+1

什麼是'$ {appenv.deployment}'前加入這一行?這是如何設置的?同時確保兩者都在相同的應用程序上下文中。 –

+0

@ M.Deinum更新了問題以澄清您的查詢。 –

+0

'src/main/resources'中的'development.properties'? –

回答

0

有你這個添加到你的應用環境文件

<context:property-placeholder location="Path for .properties file"/>

+1

我想我所做的是另一種做你的建議。請參閱'dbPropertyReader'的bean定義。 –