0

我正在使用 spring 3.0.5 并尝试读取属性文件以进行某种验证以及数据源。但是当我使用 @Value 时我得到了空值,下面是我的 cfg。

在 applicationContext.xml

  <bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="classpath:database.properties"/>

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

</bean>// here It is perfectly establishing the data-source.

我要公开属性文件值的类

@Component
public class PropertyReaderBean {

//@Value("#{propertyConfigurer1[dailyLimit]}") 
    //@Value("#{database['jdbc.driverClassName']}")
@Value("${jdbc.driverClassName}")// I tried all three but still getting null
private String limit;
public String getLimit() 
{
    System.out.println(" limit : "+limit);
    return limit;
}

public void setLimit(String limit) {
    System.out.println(" limit : "+this.limit);
    this.limit = limit;
}

最后是 databse.properties 文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/imps
jdbc.username=root
jdbc.password=root

因此,每当我尝试使用上述配置访问值属性文件时,我都会得到空值,请指导。

更新: 但是 PropertyReaderBean 的 setter 方法不起作用,我检查了堆栈跟踪,但是当我像这样添加 xml 时,我可以读取属性文件值。

<bean id="propertyDao" class="com.alw.imps.validator.PropertyReaderBean">
          <property name="limit" value="${jdbc.password}"></property>
        </bean>  
4

2 回答 2

1

您不需要属性配置器,代码中的定义有语法错误。

你可以这样做并在代码中引用你有:

  <context:property-placeholder location="classpath:database.properties"/>

依赖于此

 xmlns:context="http://www.springframework.org/schema/context"

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
于 2013-05-09T12:22:51.100 回答
1

一个可能的原因是@Value不起作用。您是否已经在应用程序上下文中声明了< context:annotation-config />

于 2013-05-09T14:29:58.477 回答