2014-03-06 95 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定义。 –