一般properties文件,用于在代码块中读取,并给变量赋值。但是,Spring可以Bean XML方式定义(注册Bean)中,可以通过${属性名}使用properties文件配置的值。或者在代码中使用@Value注解读取properties的属性值。
所以用途有两种:
1.加载properties配置文件
加载properties文件,方式有两种:
1.1 方式一
<!--
用途1:Spring的xml配置文件中,可以通过${属性名}使用properties文件配置的值
用途2:可以使用@Value("${属性名}")注解读取properties文件配置的值,再给字段赋值
方法1:注解在字段上,给字段赋值
方法2:注解在字段的setter方法中赋值
-->
<context:property-placeholder location="classpath:jdbc.properties"/>
1.2 方式二
<!--
用途1:Spring的xml配置文件中,可以通过${属性名}使用properties文件配置的值
用途2:可以使用@Value("${属性名}")注解读取properties文件配置的值,再给字段赋值
方法1:注解在字段上,给字段赋值
方法2:注解在字段的setter方法中赋值
-->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/configs/jdbc.properties</value>
</property>
</bean>
可以清楚的看到,方式一,非常地简洁,但是如果要使用多个properties就可能实现不了,其实可以通过通配符实现,会有点麻烦。
那么如何在xml文件中如何获取properties的配置文件呢?
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.driver}</value>
</property>
<property name="url" >
<value>${jdbc.url}</value>
</property>
<property name="username" >
<value>${jdbc.user}</value>
</property>
<property name="password">
<value>${jdbc.pwd}</value>
</property>
</bean>
2. 使用@Value在业务层获取配置属性
@Value注解是Spring 3.0 之后引入的新特性.
2.1. ${expression?:default value}
${}这种值,只用来读取properties配置文件中的属性值, : 前面的是属性名称,: 后面的是默认值。这种类型的值,却可以读取带点的属性值,如 file.uploadpath = E:\360Downloads\temp,可以使用@Value("${file.uploadpath}")读取
ftp的配置文件:
#ftp服务器地址
ftp.hostName=139.129.206.163
#ftp服务器端口号默认为21
ftp.port =21
#ftp的用户名称
ftp.userName=sheshu
#ftp的密码
ftp.passWord=password01!
###存储图片数据的根路径
ftp.baseFile=rootImage
#文件http服务器地址
ftp.serverUrl=http://139.129.206.163:8866
File.java文件:
package www.hrabbit.cn.model;
/**
* ftp配置文件封装
* @Auther: hrabbit
* @Date: 2018-04-17 下午6:13
* @Description:
*/
public class FTPProperties {
//ftp服务器地址
private String hostName;
//ftp服务器端口号默认为21
private Integer port;
//ftp的用户名称
private String userName;
//ftp的密码
private String passWord;
//存储图片数据的根路径
private String baseFile;
//文件http服务器地址
private String serverUrl;
public String getHostName() {
return hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getBaseFile() {
return baseFile;
}
public void setBaseFile(String baseFile) {
this.baseFile = baseFile;
}
public String getServerUrl() {
return serverUrl;
}
public void setServerUrl(String serverUrl) {
this.serverUrl = serverUrl;
}
}
FileServiceImpl.java 业务层实现
package www.hrabbit.cn.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import www.hrabbit.cn.service.FileService;
import java.util.HashMap;
import java.util.Map;
/**
* 业务层
*/
@Service("fileService")
public class FileServiceImpl implements FileService {
//通过@Value注解去spring中读取配置文件
@Value("${ftp.hostName}")
private String hostName;
/**
* 获取配置文件
* @return
*/
public ResponseEntity<String> getFTPProperties(){
try{
Map<String,Object> data = new HashMap<String,Object>();
data.put("hostName",hostName);
return ResponseEntity.ok(JSONObject.toJSONString(data));
}catch (Exception e){
e.printStackTrace();
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}
返回的数据:
这样我们可以很轻松的在业务层随时获取到配置文件;
码云:https://gitee.com/hrabbit/spring-properties
个人博客:www.hrabbit.xin