@ConfigurationProperties使用


创建一个类,类名上方注解,配置prefix属性,如下代码:

@ConfigurationProperties(
prefix = "hello.properties"
)
public class MyProperties { private String myKey;
private List<String> stringList;
private Duration duration; public String getMyKey() {
return myKey;
} public void setMyKey(String myKey) {
this.myKey = myKey;
} public List<String> getStringList() {
return stringList;
} public void setStringList(List<String> stringList) {
this.stringList = stringList;
} public Duration getDuration() {
return duration;
} public void setDuration(Duration duration) {
this.duration = duration;
} @Override
public String toString() {
return "MyProperties{" +
"myKey='" + myKey + '\'' +
", stringList=" + stringList +
", duration=" + duration +
'}';
}
}

prefix属性是配置文件里的前缀,即配置文件中以前缀 + 变量名`的形式配置一条记录,来对应类中的一个变量,如下:

hello.properties.myKey=hello
hello.properties.duration=20s
hello.properties.string-list[0]=Acelin
hello.properties.string-list[1]=nice

@ConfigurationProperties特点


宽松绑定

如下配置都是可以被识别绑定的:

hello.properties.myKey=hello
hello.properties.mykey=hello
hello.properties.my-key=hello
hello.properties.my_key=hello
hello.properties.MY_KEY=hello
hello.properties.MY-KEY=hello
支持复杂属性类型
  • 支持从配置参数中解析 durations (持续时间)
hello.properties.duration=20s
  • List 和 Set
hello.properties.string-list[0]=Acelin
hello.properties.string-list[1]=nice

激活@ConfigurationProperties


通过@EnableConfigurationProperties

如果一个配置类只单单用@ConfigurationProperties注解,那么在IOC容器中是获取不到properties 配置文件转化的bean。我们可以在想要使用该配置类的类上注解@EnableConfigurationProperties,并配置相关的类,即可拿到该装配好配置的类了。如下所示:

通过@ConfigurationPropertiesScan

该注解有点类似与@CompomentScan注解扫描@Compoment注释的类相似,也是用来扫描项目中@ConfigurationProperties注解的类,并注入spring容器中。只需将该注解注释于项目启动类上即可

其实@ConfigurationProperties更多的作用是将配置文件中的配置与类中变量对应上来,而上述两种方式是告诉Spring容器要把这个有配置特性的Bean在程序启动的时候给创建出来。那谈到的创建Bean,我们就会想到Spring创建Bean的各种方式,这些方式的同样能够激活@ConfigurationProperties,详细请看xxx

@ConfigurationProperties与@Value对比


- @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据效验 支持 不支持
复杂类型封装 支持 不支持

使用 Spring Boot Configuration Processor 完成自动补全


当我们在配置文件中写官方支持的配置的时候,我们都会发现的有自动补全配置的一个功能,那怎么也让我们自己的配置也实现这种功能呢?

其实当你用这个注解的时候,IDE是会提示你这一点的,她会在文件的上方提示你要可以配置自动补全的功能:

实现的方式就是项目导入依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

然后重新编译或运行项目:

项目会生产一个json文件

然后能够实现自动提示补全配置项的功能了

@ConfigurationProperties实现自定义配置绑定的更多相关文章

  1. Spring自定义配置--ConfigurationProperties

    自定义配置的变量名: 在 *.properties 里面定义特定的变量 server.port=9000 amazon.associateId=habuma-20 建立Properties文件制定特定 ...

  2. 02.自定义banner、全局配置文件、@Value获取自定义配置、@ConfigurationProperties、profiles配置

    自定义banner src/main/resource 下新建 banner.txt,字符复制到banner.txt 中 生成字符网站推荐: http://patorjk.com/software/t ...

  3. spring boot自定义类配置绑定在配置文件中自动提示

    在spring boot的日常使用中,我们可能需要使用配置绑定的方式动态配置自定义类的成员变量. 这个时候,我们在配置文件中配置spring默认已有的配置时,只需要输入部分关键字即可自动提示,如下图: ...

  4. SpringBoot入门(五)——自定义配置

    本文来自网易云社区 大部分比萨店也提供某种形式的自动配置.你可以点荤比萨.素比萨.香辣意大利比萨,或者是自动配置比萨中的极品--至尊比萨.在下单时,你并没有指定具体的辅料,你所点的比萨种类决定了所用的 ...

  5. SpringBoot基础系列之自定义配置源使用姿势实例演示

    [SpringBoot基础系列]自定义配置源的使用姿势介绍 前面一篇博文介绍了一个@Value的一些知识点,其中提了一个点,@Value对应的配置,除了是配置文件中之外,可以从其他的数据源中获取么,如 ...

  6. Java之SpringBoot自定义配置与整合Druid

    Java之SpringBoot自定义配置与整合Druid SpringBoot配置文件 优先级 前面SpringBoot基础有提到,关于SpringBoot配置文件可以是properties或者是ya ...

  7. ASP.NET Core的配置(3): 将配置绑定为对象[上篇]

    出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...

  8. SpringMVC 自定义参数绑定实现日期类型绑定

    package cn.itcast.ssm.controller.converter; import java.text.ParseException; import java.text.Simple ...

  9. SpringBoot编写自定义配置信息

    ⒈编写自定义配置类 1.浏览器配置 package cn.coreqi.security.properties; public class BrowserProperties { private St ...

随机推荐

  1. springboot整合拦截器如何让其不拦截默认的访问路径

    1.注册自定义拦截器2.拦截器3.控制器4.其它说明:我想做控制拦截登陆,将所有的请求拦截下来判断如果当前的session里没有用户名则跳转到登陆页面.问题是目前可以拦截所有请求了,但第一次进入登陆页 ...

  2. ptm经验总结

  3. linux学习之路第三天

    开机,重启和用户登陆注销 关机&重启命令 shutdown shutdown -h now :表示立即关机 shutdown -h 1 :表示一分钟后关机 shutdown -r now :表 ...

  4. 『心善渊』Selenium3.0基础 — 29、使用HTMLTestRunner生成unittest的HTML报告

    目录 1.HTMLTestRunner介绍 2.HTMLTestRunner的使用 3.测试报告示例 4.封装成模块 1.HTMLTestRunner介绍 HTMLTestRunner是一个基于uni ...

  5. java基础---java8 新特性

    1. 函数式接口 函数式接口主要指只包含一个抽象方法的接口,如:java.lang.Runnable(java1.0).java.util.Comparator接口(java1.4)等. Java8提 ...

  6. 小白都能理解的TCP三次握手四次挥手

    前言 TCP在学习网络知识的时候是经常的被问到知识点,也是程序员必学的知识点,今天小杨用最直白的表述带大家来认识认识,喜欢的朋友记得点点关注哈. 何为TCP 上点官方的话:是一种面向连接(连接导向)的 ...

  7. session过期跳转到登陆页面并解决跳出iframe问题

    首先,先转载如下这篇博主写的关于后台系统使用iframe不能跳出的问题,地址:https://blog.csdn.net/xiaocen99/article/details/38521649 在ifr ...

  8. Maven工程 报 Diamond types are not supported at language level '5'

    Maven工程 报 Diamond types are not supported at language level '5' 出现这种信息,一般表示的是你的language level(IDEA下J ...

  9. npm WARN checkPermissions Missing write access to ......解决方法

    npm安装出错 npm WARN checkPermissions Missing write access to ...... 解决方法: 删除本地node_modules文件夹,之后再次 npm ...

  10. ELK:match 的底层转换

    在ES中,执行match搜索的时候,ES底层通常都会对搜索条件进行底层转换,来实现最终的搜索结果.如: GET /student/java/_search { "query": { ...