我们可以在application.properties中配置自定义的属性值,为了获取这些值,我们可以使用spring提供的@value注解,还可以使用springboot提供的@ConfigurationProperties注解非常方便的完成属性值的注入。
1. 在application.properties中添加自定义属性配置
#七牛oss配置
qiniu.accessKey = zcqSW4uul68vm7K_ryHEYPVTpM-9H7UP0eslY3xk
qiniu.secretKey = 2QwaKSktWm5O1sIaqQqzqOMF6WtD6sncNnRaYB4w
qiniu.bucket = blog
qiniu.path = http://static.wangkaihua.com
2. 编写Bean类,加载属性
Sam类需要添加@Component注解,让spring在启动的时候扫描到该类,并添加到spring容器中。
第一种:使用spring支持的@Value()实现
import org.springframework.stereotype.Component;
/**
* 七牛oss 文件上传的相关配置类
* @author wangkaihua
*/
@Component
public class QiNiuConfig {
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.secretKey}")
private String secretKey;
@Value("${qiniu.bucket}")
private String bucket;
@Value("${qiniu.path}")
private String path;
//省略getXXX、setXXX方法
}
第二种:使用@ConfigurationProperties(prefix="") 设置前缀,属性上不需要添加注解。
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 七牛oss 文件上传的相关配置类
* @author wangkaihua
*/
@Component
@ConfigurationProperties(prefix = "qiniu")
public class QiNiuConfig {
private String accessKey;
private String secretKey;
private String bucket;
private String path;
//省略getXXX、setXXX方法
}
3. 在controller中或者service中注入并使用QiNiuConfig这个Bean。
@Component
public class QiniuUtil {
@Autowired
private QiNiuConfig qiNiuConfig;
public String uploadImg(FileInputStream file) throws QiniuException {
// 省略xxxxxx
System.out.printl("获取自定义属性值:"+qiNiuConfig.getPath());
System.out.printl("获取自定义属性值:"+qiNiuConfig.getBucket());
}
}
区别
@ConfigurationProperties
能够批量注入配置文件的属性。@Value
只能一个个指定。@ConfigurationProperties
支持松散绑定。@ConfigurationProperties(prefix = "person")
,只需要指定一个前缀,就能绑定有这个前缀的所有属性值。- @Value支持SpringEl的语法。@ConfigurationProperties不支持SpringEl的语法。
- @ConfigurationProperties还支持JSR303进行配置文件值及校验。
@Component
@ConfigurationProperties(prefix = "qiniu")
@Validated
public class QiNiuConfig {
@NotNull
private String accessKey;
@NotNull
private String secretKey;
@NotNull
private String bucket;
@Email
private String path;
//省略getXXX、setXXX方法
}
当我们注入的不是一个邮箱格式时,启动项目报错:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target com.wangkaihua.myblog.common.QiNiuConfig@3e792ce3 failed:
Property: qiniu.path
Value: http://static.wangkaihua.com
Reason: 不是一个合法的电子邮件地址
Action:
Update your application's configuration
总结
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们要编写了一个javabean和配置文件进行映射,就直接使用ConfigurationProperties简化配置;