如何使用Spring注入键值属性文件?

时间:2014-07-18 08:34:58

标签: java spring properties io

我有一个keyvalue属性文件,其中包含错误代码及其错误消息。

我想在应用程序启动时注入此文件,以便我可以在注入的属性上进行查找而无需读取文件。

以下只是伪代码,Spring中是否有可以创建此设置的内容?

@Value(location = "classpath:app.properties")
private Properties props;

而app.properties包含:

error1=test
error2=bla
...

如果没有,我怎么能在没有弹簧的情况下实现这个目标?

4 个答案:

答案 0 :(得分:1)

您可以先在Spring配置中使用<util:properties>声明属性文件:

<util:properties id="messages" location="classpath:app.properties" />

这会注册一个名为messages的bean,您可以在其他bean中自动装配/注入。

@Autowired
@Qualifier("messages")
private Properties props;

更多信息:

答案 1 :(得分:1)

感谢“kocko”的帮助,以下设置按预期工作,只有注释配置:

@Bean(name = "errors")
public PropertiesFactoryBean mapper() {
    PropertiesFactoryBean bean = new PropertiesFactoryBean();
    bean.setLocation(new ClassPathResource("errors.properties"));
    return bean;
}

@Resource(name = "errors")
private Properties errors;

或者,如果资源不应该作为bean提供,而只是在@Component内加载:

@Component
public class MyLoader {
    private Properties keys;

    @PostConstruct
    public void init() throws IOException {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new ClassPathResource("app.properties"));
        bean.afterPropertiesSet();
        keys = bean.getObject();
    }
}

答案 2 :(得分:0)

我在我的项目中这样做

  <bean id="myPropertyHolder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
      <list>
         <value>classpath:myApplication.properties</value> 
      </list>
    </property>
  </bean>

然后使用下面的属性

<property name="testProperty" value="${testProperty}" />

答案 3 :(得分:0)

@M Sach 您也可以使用属性位置代替位置,因此您不必使用列表