springboot 中各种配置项纪录

1. @Value

最早获取配置文件中的配置的时候,使用的就是这个注解,SpEL表达式语言。

// 使用起来很简单
@Value("${config.demo.value:defaultValue}")
private String simpleValue;

2. @ConfigurationProperties

通常我们配置的时候,不仅仅是一个单独字段,可能是一组配置,用来组成一个对象。这个时候spring为我们提供了这个注解。

简单的对象,在yml里也可以很简单的写出来。直接把每一个字段写出即可。

而对复杂对象,如:list、map等的,就需要查一下资料了,这里简单记录一下写法,直接看代码。

# 配置示例
config:
demo:
value: testValue simpleConfig:
config: testConfig str1: abc,cde
str2:
- abc
- cde configMap:
key1: value1
海贼王: 路飞 simpleConfigs:
- config: 罗宾
count: 1
- config: 乌索普
count: 1
- config: 索隆
count: 1 configObjMap:
key1:
config: value1
key2:
config: value2

pojo 对象定义如下:

@Data
@ConfigurationProperties(prefix = "config.demo")
@Configuration
public class ConfigDemo {
@Value("${config.demo.value:defaultValue}")
private String simpleValue; /**===========简单对象===========*/
/**
* 对象
*/
private SimpleConfig simpleConfig;
/**
* 字符串数组1
*/
private List<String> str1;
/**
* 字符串数组1
*/
private List<String> str2;
/**
* 键值对
*/
private Map<String, String> configMap; /**
* ===========多个复杂对象==========
*/
/**
* 对象集合
*/
private List<SimpleConfig> simpleConfigs;
/**
* 对象作为map值
*/
private Map<String, SimpleConfig> configObjMap; @Data
public static class SimpleConfig { // 注意:这里需要内部类是public的,要不然注入的时候会出错。
private String config;
private int count;
}
}

以上就是各种情况的书写。其实也不难,list 就增加 - 来作为单个对象标识,而map就直接写key即可。

而spring在存储properties的时候是怎么处理的呢,我们可以断点一下 PropertyPlaceholderHelper,在这里我们可以看到存储各种配置的source如下图:

底层都是通过一个ResourceReloadingMap来存储的,那么存储list的时候,是什么结构呢,如下:

// 存储的时候是这样的:

simpleConfigs[0].config=configValue
simpleConfigs[0].count=countValue
...

所以最终都是通过键值对的方式,只是对应的格式,spring可以解析成对应的样子而已。

springboot 中yml配置的更多相关文章

  1. SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例

    SpringBoot 使用yml配置 mybatis+pagehelper+druid+freemarker实例 这是一个简单的SpringBoot整合实例 这里是项目的结构目录 首先是pom.xml ...

  2. (二)Redis在Mac下的安装与SpringBoot中的配置

    1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...

  3. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  4. springboot 读取 yml 配置的几种方式

    前言:在springboot 项目中一般默认的配置文件是application.properties,但是实际项目中我们一般会使用application.yml 文件,下面就介绍一下在springbo ...

  5. springboot application.yml配置学习

    一.背景 为了更好的使用springboot,所以看一下application.yml配置这块.主要是看数据绑定这块. 主要参考:https://www.hangge.com/blog/cache/d ...

  6. SpringBoot的yml配置

    Spring Boot的yml配置 #开发配置 spring: data: solr: host: http://localhost:6789/solr/mote mvc: view: # 页面默认前 ...

  7. springboot中xml配置之@ImportResource

    springboot中进行相关的配置往往有java配置和xml配置两种方式. 使用java的方式配置只需要使用@configuration注解即可,而使用xml的方式配置的话需要使用@ImportRe ...

  8. Springboot中以配置类方式自定义Mybatis的配置规则(如开启驼峰映射等)

    什么是自定义Mybatis的配置规则? 答:即原来在mybatis配置文件中中我们配置到<settings>标签中的内容,如下第6-10行内容: 1 <?xml version=&q ...

  9. 案例源码解读及思路:RabbitMQ在springboot中的配置

    程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...

随机推荐

  1. LeetCode 029 Divide Two Integers

    题目要求:Divide Two Integers Divide two integers without using multiplication, division and mod operator ...

  2. Python的偏函数

    import functools def showag(*args,**kwargs): print(args) print(kwargs) p1 = functools.partial(showag ...

  3. Nginx配置Https(详细、完整)

    Nginx配置Https(详细.完整) 原文链接:请支持原创 前置条件: 在配置https之前请确保下面的步骤已经完成 服务器已经安装nginx并且通过http可以正常访问 不会安装nginx的可以参 ...

  4. SSM框架之MyBatis框架实现简单的增删改查

    MyBatis框架介绍 MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系是一种半自动化的ORM实现,其封装性要低于Hibernate,性能优越,并且小巧,简单易学,应用也 ...

  5. java并发编程实战《八》管程

    管程:并发编程的万能钥匙 为什么 Java 在 1.5 之前仅仅提供了 synchronized 关键字及 wait().notify().notifyAll() 这三个看似从天而降的方法? Java ...

  6. 第7.23节 Python使用property函数定义属性简化属性访问的代码实现

    第7.23节 Python使用property函数定义属性简化属性访问的代码实现 一.    背景       在本章前面章节中,我们介绍了类相关的知识,并举例进行了说明,在这些例子中会定义一些形如 ...

  7. PyQt(Python+Qt)学习随笔:Qt Designer中图像资源的使用及资源文件的管理

    一.概述 在Qt Designer中要使用图片资源有三种方法:通过图像文件指定.通过资源文件指定.通过theme主题方式指定,对应的设置界面在需要指定图像的属性栏如windowIcon中通过点击属性设 ...

  8. 第15.11节 PyQt(Python+Qt)入门学习:Qt Designer(设计师)组件Property Editor(属性编辑)界面中主窗口QMainWindow类相关属性详解

    概述 主窗口对象是在新建窗口对象时,选择main window类型的模板时创建的窗口对象,如图: 在属性编辑界面中,主窗口对象与QMainWindow相关的属性包括:iconSize.toolButt ...

  9. Metasploit魔鬼训练营第一章作业

    1, Samba服务 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共 ...

  10. [BJDCTF 2nd]简单注入

    [BJDCTF 2nd]简单注入 hint.txt出现了内容. 大概意思和国赛一道题相同. username处注入\来转义单引号,password处使用sql语句整数型注入. 例如: 传入admin\ ...