关于spring在程序中读取properties文件配置项的方法
2016-07-08 16:45
537 查看
需求背景: 项目中配置了一些properties文件,现在需要在某一个类中,定义一个属性,该属性的值为这些配置文件中的一个配置项的值。
在用@value 注解实现该需求之前,我所用的方法如下:
在该类的构造方法中,定义一个properties 对象,该对象把配置文件的配置项load 进来,再把配置项的值赋给类中定义的属性。 具体实现的代码如下:
public ClassName() {
init();
}
@ConstructorArgs
public void
init() {
try {
Properties
pr = new Properties();
pr.load(FileUploadController.class.getClassLoader().getResourceAsStream("system.properties"));
domain = pr.getProperty("domain");
} catch (IOException e) {
logger.error("初始化失败,原因::" + e.getMessage(), e);
}
}
后来得到一位同事的指点,说直接用@value 就行了,于是我在网上搜了一下,得到结果如下:
首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}");
其次,下面我们来看看如何使用这两形式,在配置上有什么区别:
1、@Value("#{configProperties['t1.msgname']}")这种形式的配置中有“configProperties”,其实它指定的是配置文件的加载对象:配置如下:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/config/t1.properties</value>
</list>
</property>
</bean>
这样配置就可完成对属性的具体注入了;
2、@Value("${t1.msgname}")这种形式不需要指定具体加载对象,这时候需要一个关键的对象来完成PreferencesPlaceholderConfigurer,这个对象的配置可以利用上面配置1中的配置,也可以自己直接自定配置文件路径。
如果使用配置1中的配置,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
</bean>
如果直接指定配置文件的话,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>config/t1.properties</value>
</property>
</bean>
}
}
在用@value 注解实现该需求之前,我所用的方法如下:
在该类的构造方法中,定义一个properties 对象,该对象把配置文件的配置项load 进来,再把配置项的值赋给类中定义的属性。 具体实现的代码如下:
public ClassName() {
init();
}
@ConstructorArgs
public void
init() {
try {
Properties
pr = new Properties();
pr.load(FileUploadController.class.getClassLoader().getResourceAsStream("system.properties"));
domain = pr.getProperty("domain");
} catch (IOException e) {
logger.error("初始化失败,原因::" + e.getMessage(), e);
}
}
后来得到一位同事的指点,说直接用@value 就行了,于是我在网上搜了一下,得到结果如下:
首先,@value需要参数,这里参数可以是两种形式:@Value("#{configProperties['t1.msgname']}")或者@Value("${t1.msgname}");
其次,下面我们来看看如何使用这两形式,在配置上有什么区别:
1、@Value("#{configProperties['t1.msgname']}")这种形式的配置中有“configProperties”,其实它指定的是配置文件的加载对象:配置如下:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:/config/t1.properties</value>
</list>
</property>
</bean>
这样配置就可完成对属性的具体注入了;
2、@Value("${t1.msgname}")这种形式不需要指定具体加载对象,这时候需要一个关键的对象来完成PreferencesPlaceholderConfigurer,这个对象的配置可以利用上面配置1中的配置,也可以自己直接自定配置文件路径。
如果使用配置1中的配置,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
</bean>
如果直接指定配置文件的话,可以写成如下情况:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="location">
<value>config/t1.properties</value>
</property>
</bean>
}
}
相关文章推荐
- Java下利用Jackson进行Json的转化解析
- Spring对Hibernate事务管理
- JAVA使用POI如何导出百万级别数据
- Java集合源码分析(五)HashSet<E>
- Spring测试 其实很简单
- 浅谈Java设计模式(五)原型模式(Prototype)
- Java String类 传参的问题
- Java文件目录操作
- Java NIO使用及原理分析(三)
- ArrayList输出的几种方法
- Java - 数据库 - (mysql -2)
- Spring 之 JdbcTemplate
- java生成xml格式文件的方法
- 深入理解Java虚拟机-虚拟机性能监控与故障处理工具
- 深入理解Spring事务原理
- Java链式异常
- 浅谈Java设计模式(三)单例模式(Singleton)
- CharsetUtils.java
- MySQL Connectors Java下载及使用
- 【奔跑的菜鸟】第一个Java程序