我有一个keyvalue属性文件,其中包含错误代码及其错误消息。
我想在应用程序启动时注入此文件,以便我可以在注入的属性上进行查找而无需读取文件。
以下只是伪代码,Spring
中是否有可以创建此设置的内容?
@Value(location = "classpath:app.properties")
private Properties props;
而app.properties包含:
error1=test
error2=bla
...
如果没有,我怎么能在没有弹簧的情况下实现这个目标?
答案 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 您也可以使用属性位置代替位置,因此您不必使用列表