SpringBoot自定义属性配置以及@ConfigurationProperties注解与@Value注解区别
我们可以在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简化配置;
SpringBoot自定义属性配置以及@ConfigurationProperties注解与@Value注解区别的更多相关文章
- SpringBoot自动配置原理源码级别分析
SpringBoot自动配置原理 前言 后面还会讲到SpringBoot自动配置原理,会主要讲解@EnableAutoConfiguratuon注解帮助我们做了什么事情,是如何自动把自动配置类扫描到容 ...
- springBoot中实现自定义属性配置、实现异步调用、多环境配置
springBoot中其他相关: 1:springBoot中自定义参数: 1-1.自定义属性配置: 在application.properties中除了可以修改默认配置,我们还可以在这配置自定义的属性 ...
- SpringBoot配置中@ConfigurationProperties和@Value的区别
基本特征 @ConfigurationProperties 与@Bean结合为属性赋值 与@PropertySource(只能用于properties文件)结合读取指定文件 与@Validation结 ...
- SpringBoot自动配置注解原理解析
1. SpringBoot启动主程序类: @SpringBootApplication public class DemoApplication { public static void main(S ...
- 助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二) 上一篇分析了SpringBoo ...
- springboot Aop配置,并使用自定义注解annotation,并且拦截service层
前言 用Spring Boot的AOP来简化处理自定义注解,并将通过实现一个简单的方法执行判断节点是否开始的状态示列源码. AOP概念 面向侧面的程序设计(aspect-oriented progra ...
- springBoot属性配置和使用
Spring Boot 属性配置和使用 1.添加属性文件 application.properties (名字固定) 2.访问端口生效 3.更多配置参考 # ===================== ...
- 如何编写Spring-Boot自动配置
摘要 本文主要介绍如何把一个spring的项目(特别是一些公共工具类项目),基于spring boot的自动配置的思想封装起来,使其他Spring-Boot项目引入后能够进行快速配置. AutoCon ...
- Spring Boot 系列(三)属性配置&自定义属性配置
在使用spring boot过程中,可以发现项目中只需要极少的配置就能完成相应的功能,这归功于spring boot中的模块化配置,在pom.xml中依赖的每个Starter都有默认配置,而这些默认配 ...
随机推荐
- 【原创】Windows服务管家婆之Service Control Manager
Service Control Manager,服务控制管理器,人称SCM就是它!在Windows内核中,都可以看到她忙碌的身影,可以说是系统服务和驱动的管家婆了! SCM管家婆起早贪黑,每次 ...
- CentOS7 Hadoop 3.1.0 编译安装
1.配置环境变量 JAVA_HOME=/jdk1..0_131 ANT_HOME=/apache-ant- MAVEN_HOME=/apache-maven- FINDBUGS_HOME=/findb ...
- go跨平台编译
go语言支持直接编译不同系统的可执行程序,例如可以直接在mac上可以直接编译linux的执行程序 支持的环境变量 GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux, ...
- 开发-封闭原则(OCP)
1.什么是“开放-封闭” 随着软件系统规模的不断增大,软件系统的维护和修改的复杂性不断提高,这种困境促使法国工程院士Bertrand Meyer在1998年提出了“开放-封闭”(Open-Close ...
- spring学习(二) ———— AOP之AspectJ框架的使用
前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...
- MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken
前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...
- Webapi创建和使用 以及填坑(三)
WebApi使用填坑 前面工作跟别人做数据对接,因为我们是对接方所以东西都得按照他们的要求进行修改,于是给自己挖了很多坑,其实更多的都是自己能力还不够,在这里也做一个笔记了. 请求类型:applica ...
- php opcodes运行原理
谈下php的运行原理--Opcodes. 比如以下一段简单的代码: <?php echo '周伯通‘: ?> 执行这段代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend) ...
- Java自动内存管理机制学习(二):垃圾回收器与内存分配策略
备注:本文引自<深入理解Java虚拟机第二版>仅供参考 图片来自:http://csdn.net/WSYW126 垃圾收集器与内存分配策略 概述 GC要完成3件事: 哪些内存需要回收? 什 ...
- 文件权限解释rwx
linux文件权限 r 读w 写x (execute)执行 rwxrw-r-- 解释:rwx文件所有者对该文件有读写执行的权限:rw- 组内用户对该文件有读写的权限:r-- 其他非本组用户对该文件具有 ...