今天在做项目的时候,用到了项目的全局配置文件config.properties。在此记录下用spring的这种读取properties文件的方式,方便以后查阅。
1.修改属性文件confog.properties
#path of upload
pfo.fileupload.server.path=/aaa/bbb
(1)【.properties】文件的内容都是键值对的形式,在项目中可以存放比如数据库连接信息这样的经常会修改的值,做成配置文件的话可以,在配置改变时,只修改文件避免修改源代码
(2)上面的配置是项目读取文件的路径。比如我的域名是aaa
,文件路径就是aaa/file/filepath
2.修改spring的配置文件
在<beans>
标签下添加一个bean,代码如下
<!-- 配置文件config.properties -->
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:config.properties" />
</bean>
(1)【classpath:】此配置表示告诉web容器去classpath
(WEB-INF/classes和WEB-INF/lib)
中去加载指定名称的配置文件。摘抄自:classpath和classpath*的区别
(2)配置中定义id为configProperties
,id在后文会用到。
3.修改读取全局配置文件的类OperatParam
(如果没有可以新建)
我的项目中用的是基于注解的方式,所以这个类要求spring注解扫描扫描设置的包下。
<!-- 注解扫描包 -->
<context:component-scan base-package="xxx.yyy" />
OperatParam
的代码
/**
*
* @ClassName: OperatParam
* @Description:获取属性文件key value[config.properties]
*/
@Component
public class OperatParam {
private Map<String, String> configMap;
@Resource
private Properties configProperties;//通过在spring配置bean,读取config.properties文件
@PostConstruct
private void init() {
this.configMap = new HashMap<String, String>();
Set<?> keys = this.configProperties.keySet();
for (Iterator<?> localIterator = keys.iterator(); localIterator.hasNext();) {
Object key = localIterator.next();
this.configMap.put(key.toString(), this.configProperties.getProperty(key.toString()));
}
}
public String get(String key) {
return (String) this.configMap.get(key);
}
}
【@Component】:把普通的类注入到spring容器中,可以和@Controller, @Service, @repository进行区分;
【@Resource】:根据名称实现依赖注入,这里的configProperties
属性就是第一点中配置的id;
【@PostConstruct】:在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法;
【init()】:调用该方法读取配置文件的内容存在map中;
【get(String key)】在项目中调用该方法获取特定的属性值。
4.使用案例
文件上传时,设置上传路径。代码如下:
【FileUpload.java】
@Resource
private OperatParam operatParam;//依赖注入一个OperatParam对象
if(isLocal) {
dir = System.getProperty("webapp.root")+"upload";
} else {
//dir = "/aaa/bbb";
dir = operatParam.get("pfo.fileupload.server.path");//调用get(String key)读取属性文件
}
以上就是在我的项目中使用的方式,如果有不正确的地方或者可以优化的地方欢迎指正!