学习 @ConfigurationProperties 之前我们需要一些前置知识点:

@Value是个什么东西

首先明确:@ConfigurationProperties 是 SpringBoot 注解。

我们在讲 @Value 时知道了如何将配置文件的属性注入到变量中,废话不多说,直接上代码。

这是配置文件配置:

spring.datasource.dynamic.mysql.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.mysql.url=jdbc:mysql://localhost:3306/db1
spring.datasource.dynamic.mysql.username=root
spring.datasource.dynamic.mysql.password=root

麻烦?

没事,有简单的,我们用简单的:

spring:
  datasource:
    dynamic:
      mysql:
        driverClassName: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db1
        username: root
        password: root

使用 @Value 获取配置:

@Configuration
public class DynamicDataSourceConfig {
    
    @Value("${spring.datasource.dynamic.mysql.driverClassName}")
    private String driverClassName;
    @Value("${spring.datasource.dynamic.mysql.url}")
    private String url;
    @Value("${spring.datasource.dynamic.mysql.username}")
    private String username;
    @Value("${spring.datasource.dynamic.mysql.password}")
    private String password;     }

写完之后整整齐齐,帅!

如果有人觉得帅,一定还没成长成一个合格的程序员。

我们程序员追求什么?

优雅。

优雅永不过时。

优雅最重要的一条原则是什么?

不写重复代码!

所以怎么办?

有办法。

下面我们讲一下 @ConfigurationProperties 。

作用

将标注了 @ConfigurationProperties 注解的Spring容器中的Bean与配置文件中的属性进行一一绑定,用于更加快速、方便的读取配置文件的内容。

使用方式一:@Component

直接上代码:

@Component
@ConfigurationProperties(prefix = "spring.datasource.dynamic.mysql")
@Data
public class DynamicDataSourceConfig {
    
    private String driverClassName;
    private String url;
    private String username;
    private String password;     }

写完之后清清爽爽,帅!

我们发现了几个关键点:

1.原来的 @Configuration 变成了 @Component

这个不影响,因为 @Configuration 中包含了 @Component,这里主要强调通过@Component注解将其注册成Bean。

2.@ConfigurationProperties(prefix = "")

这是我们的主角,prefix 就是匹配我们属性值的前缀,有了它我们就少写好多代码。

3.多了个@Data

@Data的功能中包含了setter方法,没有setter怎么赋值?!

使用方式二:@EnableConfigurationProperties

WTF is @EnableConfigurationProperties?

@EnableConfigurationProperties 就是:

@ConfigurationProperties,启动!

如果配置类只配置了 @ConfigurationProperties 注解,而没有使用@Component,也就是在IOC容器中是获取不到bean。

那就需要 @EnableConfigurationProperties 把使用 @ConfigurationProperties 的类进行了一次注入

怎么用呢?

需要与@Configuration一起使用。

需要与@Configuration一起使用。

需要与@Configuration一起使用。

上代码:

@ConfigurationProperties(prefix = "father")
@Data
public class Father {
   private String name;
}
@Configuration
@EnableConfigurationProperties(Father.class)
public class MainConfig {
}

实际开发中可能更多的写在 Application 启动类上。

这时候 A 同学问了:

那启动类上没有 @Configuration 啊?

有的,@SpringBootApplication 也是一个@Configuration。

又有 B 同学问了:

那我有两个配置类怎么写呢?

哎?好办。

@Configuration
@EnableConfigurationProperties(Father.class, Son.class)
public class MainConfig {
}

又有 C 同学问了:

那我有 100 个配置类呢?

聪明的 B 同学说:

我知道我知道!

@Configuration
@EnableConfigurationProperties(Father.class, Son.class, GrandSon.class, GrandgrandSon.class...)
public class MainConfig {
}

...

不愧是你。

那怎么办呢?

也有办法。

使用方式三:@ConfigurationPropertiesScan

SpringBoot 2.2.0版本以后提供了这个注解。

这个注解加到启动类上,注明包路径。

系统就会扫描这个包路径下的所有包含 @ConfigurationProperties 注解的配置类。

如果不写包路径,就默认扫描启动类所在包及其子包。

这样就不用写一百个类了。

@SpringBootApplication
@ConfigurationPropertiesScan
public class DemoAnnotationApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoAnnotationApplication.class, args);
    }
}

差不多了吧?

什么?小明,你有话说?

那既然 @Component 能注册成 Bean,那我使用 @Configuration 加 @Bean 注册又怎么说?

卧槽,还有高手?

使用方式四:@Bean

@Data
public class Animal {
    private String name;
}
@Configuration
public class MainConfig {
    @Bean
    @ConfigurationProperties(prefix = "animal")
    public Animal getAnimalBean() {
        return new Animal();
    }
}
animal.name=Wangcai

还有高手吗?

下课!


联系我:

https://stanezhang.github.io/

学会@ConfigurationProperties月薪过三千的更多相关文章

  1. 正在找工作的同学看过来,zozo最新的java面试题总会,学会月薪3万起!!!

    引言 为正在找工作的同学提供些许帮助,话不多说直接上题. 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! 关注后私信我[资料]即可免费获取! ...

  2. 前端程序员:月薪 5K 到 5 万,我干了啥(转)

    转自:http://www.imooc.com/article/4110 前端程序员:月薪 5K 到 5 万,我干了啥前端开发工作已经变的越来越复杂,仅仅是想罗列一份前端开发的学习列表就已经是一件艰巨 ...

  3. @Import @bean,@Conditional @ConfigurationProperties @EnableConfigurationProperties 注解使用

    一分钟学会spring注解之@Import注解http://blog.51cto.com/4247649/2118354 @Autowired与@Resource 注解的使用 https://www. ...

  4. 大厂程序员因厌恶编程,辞去月薪2w+的工作去当司机?

    世界好小啊,刚在一个 UP 主的群里看到一个视频,标题叫做:"失业了工作没找到,却稀里糊涂上了知乎热搜,2000 多万人围观,我--" 说实话,看到视频的封面,我的下巴当时就掉到了 ...

  5. 毕业三年,如何达到月薪30K?我想跟你聊聊!!

    写在前面 很多读者私信问我,自己工作三多年了,随着工作年限的不断增长,感觉自己的技术水平与自己的工作年限严重不符.想跳槽出去换个新环境吧,又感觉自己的能力达不到心仪公司的标准,即使投了简历也没人来通知 ...

  6. 跟你说个笑话,硕士毕业两年,月薪10k,天天面向CV编程

    "枯燥乏味的一天,又tm要开始了". 早上10:00,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug. 9 个小时增删改查.搬砖写代码的一天又 ...

  7. 说实话,Android开发月薪3W,谁不酸呢?

    近期有个网友在某匿名区晒字节跳动Offfer,毕业一年月薪3W,引发众多读者羡慕,纷纷留言酸了.酸了.但进大厂的要求还是蛮高的,需要在技术实力上有一定的积累,今天给大家分享一份高质量笔记, 助力大家技 ...

  8. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

  9. [C#] C# 知识回顾 - 学会使用异常

    学会使用异常 在 C# 中,程序中在运行时出现的错误,会不断在程序中进行传播,这种机制称为“异常”. 异常通常由错误的代码引发,并由能够更正错误的代码进行 catch. 异常可由 .NET 的 CLR ...

  10. 让你从零开始学会写爬虫的5个教程(Python)

    写爬虫总是非常吸引IT学习者,毕竟光听起来就很酷炫极客,我也知道很多人学完基础知识之后,第一个项目开发就是自己写一个爬虫玩玩. 其实懂了之后,写个爬虫脚本是很简单的,但是对于新手来说却并不是那么容易. ...

随机推荐

  1. Selenium+dddocr轻松解决Web自动化验证码识别

    大家好,我是狂师,今天给大家推荐一款验证码识别神器:dddocr. 1.介绍 dddocr是一个基于深度学习的OCR(Optical Character Recognition,光学字符识别)库,用于 ...

  2. dubbo+zookeeper+springboot远程连接,虚拟机和主机分布式操作

    dubbo+zookeeper+springboot远程连接,虚拟机和主机分布式操作 springboot版本:阿里云2.3.7 实现目标 在主机上的消费者可以调用虚拟机中生产者的接口方法 项目目录 ...

  3. No module named virtualenvwrapper 虚拟环境报错

    No module named virtualenvwrapper 虚拟环境报错 安装虚拟环境命令 sudo pip install virtualenv sudo pip install virtu ...

  4. umich cv-2-1

    UMICH CV Linear Classifiers 对于使用线性分类器来进行图片分类,我们可以给出这样的参数化方法: 而对于这样一个式子,我们怎么去理解呢? 首先从代数的角度,这个f(x,W)就是 ...

  5. RPM软件包:Red HatPackage Manager,RPM

    RPM软件包是按照GPL条款发行在各个linux版本上使用. 用途 可以安装.删除.升级.刷新和管理RPM软件包 通过RPM软件包管理能知道软件包包含哪些文件,也能知道系统中的某个文件属于哪个RPM软 ...

  6. 0 基础晋级 Serverless 高手课 — 初识 Serverless(下)

    冷启动 1. 流量预测 2. 提前启动 3. 实例复用 每个厂商规范不一致:,兼容,适配层:adapter: fs+oss 云厂商对比 产品维度 功能架构角度 个人博客官网 小程序           ...

  7. MySQL PXC集群新增一个高版本节点

    已有的一个 MySQL PXC 集群环境,因为种种原因仅剩一个节点 node1,需要新增一个集群节点 node2. node1 版本:donor version (8.0.21) node2 版本:l ...

  8. SonarQube系列-通过配置扫描分析范围,聚焦关键问题

    在许多情况下,你可能不希望分析项目中每个源文件的各个方面.例如,项目可能包含生成的代码.库中的源代码或有意复制的代码.在这种情况下,跳过这些文件分析的部分或全部方面是有意义的,从而消除干扰并将焦点缩小 ...

  9. Subtree 题解

    Subtree 题目大意 给定一颗树,你可以选出一些节点,你需要对于每个点求出在强制选这个点的情况下所有选择的点联通的方案数,对给定模数取模. 思路分析 对于这种求树上每一个点方案数的题目,首先考虑换 ...

  10. P5445 [APIO2019] 路灯 题解

    题目链接 题目描述 给你一个 01 串,有 \(q\) 个时刻,每个时刻要么把一位取反,要么问你在过去的所有时刻中有多少个时刻 \(a\) 和 \(b-1\) 之间都为 1. 题目分析 观察题目,我们 ...