首页 > 其他分享 >Spring @ConfigurationProperties Yaml语法配置List和Map:List<String>、List<Obj>、List<List<

Spring @ConfigurationProperties Yaml语法配置List和Map:List<String>、List<Obj>、List<List<

时间:2023-10-27 15:23:22浏览次数:24  
标签:userName Map userId List 123 Spring 321

yaml语法

数据结构可以用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。

例子:

配置类 YmalConfig:

import cn.hutool.json.JSONUtil;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Data
@Component
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "testymal")
public class YmalConfig {

    private String configName;

    private UserInfo userInfo;

    private List<String> lists;

    private List<UserInfo> listUserInfo;

    private List<List<UserInfo>> listUserInfos;

    private Map<String,String> maps;

    private Map<String,List<String>> mapList;

    private Map<String,UserInfo> mapUser;

    private Map<String,List<UserInfo>> mapUserList;


    @Override
    public String toString() {
        return JSONUtil.toJsonStr(this);
    }
}

用户信息 UserInfo:

import lombok.Data;

@Data
public class UserInfo {

    private Integer userId;

    private String userName;

}

日志输出(这个类是用来 打印配置) LogConfig:

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class LogConfig implements CommandLineRunner {

    @Autowired
    YmalConfig ymalConfig;

    @Override
    public void run(String... args) throws Exception {
        log.info("ymalConfig 日志打印配置 : {}", ymalConfig);
    }
}

yml配置文件:

testymal:
  # String configName
  configName: 我是ymal配置

  # UserInfo userInfo
  userInfo:
    userId: 123
    userName: 张三

  # List<String> lists
  lists:
    - 1
    - 2
    - 3
    - 4

  # List<UserInfo> listUserInfo
  listUserInfo:
    - userId: 123
      userName: 张三
    - userId: 321
      userName: 李四

  # List<List<UserInfo>> listUserInfos
  listUserInfos:
    -
      - userId: 123
        userName: 张三
      - userId: 321
        userName: 李四
    -
      - userId: 456
        userName: 王五
      - userId: 654
        userName: 赵六

  # Map<String,String> maps
  maps:
    id: 我是id
    name: 我是name
    age: 我是age

  # Map<String,List<String>> mapList
  mapList:
    userIds:
      - 123
      - 321
    ips:
      - 127.0.0.1
      - 127.0.0.2


  # Map<String,UserInfo> mapUser
  mapUser:
    123:
      userId: 123
      userName: 张三
    321:
      userId: 321
      userName: 李四

  # Map<String,List<UserInfo>> mapUserList
  mapUserList:
    A:
      - userId: 123
        userName: 张三
      - userId: 321
        userName: 李四
    B:
      - userId: 456
        userName: 王五
      - userId: 654
        userName: 赵六

控制台日志打印

ymalConfig 日志打印配置 : {"configName":"我是ymal配置","userInfo":{"userId":123,"userName":"张三"},"lists":["1","2","3","4"],"listUserInfo":[{"userId":123,"userName":"张三"},{"userId":321,"userName":"李四"}],"listUserInfos":[[{"userId":123,"userName":"张三"},{"userId":321,"userName":"李四"}],[{"userId":456,"userName":"王五"},{"userId":654,"userName":"赵六"}]],"maps":{"id":"我是id","name":"我是name","age":"我是age"},"mapList":{"userIds":["123","321"],"ips":["127.0.0.1","127.0.0.2"]},"mapUser":{"123":{"userId":123,"userName":"张三"},"321":{"userId":321,"userName":"李四"}},"mapUserList":{"A":[{"userId":123,"userName":"张三"},{"userId":321,"userName":"李四"}],"B":[{"userId":456,"userName":"王五"},{"userId":654,"userName":"赵六"}]}}

把控制台打印的日志 :Json格式字符串,格式化后,效果如下:

{
    "configName": "我是ymal配置",
    "listUserInfo": [
        {
            "userId": 123,
            "userName": "张三"
        },
        {
            "userId": 321,
            "userName": "李四"
        }
    ],
    "listUserInfos": [
        [
            {
                "userId": 123,
                "userName": "张三"
            },
            {
                "userId": 321,
                "userName": "李四"
            }
        ],
        [
            {
                "userId": 456,
                "userName": "王五"
            },
            {
                "userId": 654,
                "userName": "赵六"
            }
        ]
    ],
    "lists": [
        "1",
        "2",
        "3",
        "4"
    ],
    "mapList": {
        "ips": [
            "127.0.0.1",
            "127.0.0.2"
        ],
        "userIds": [
            "123",
            "321"
        ]
    },
    "mapUser": {
        "123": {
            "userId": 123,
            "userName": "张三"
        },
        "321": {
            "userId": 321,
            "userName": "李四"
        }
    },
    "mapUserList": {
        "A": [
            {
                "userId": 123,
                "userName": "张三"
            },
            {
                "userId": 321,
                "userName": "李四"
            }
        ],
        "B": [
            {
                "userId": 456,
                "userName": "王五"
            },
            {
                "userId": 654,
                "userName": "赵六"
            }
        ]
    },
    "maps": {
        "age": "我是age",
        "id": "我是id",
        "name": "我是name"
    },
    "userInfo": {
        "userId": 123,
        "userName": "张三"
    }
}

done.

标签:userName,Map,userId,List,123,Spring,321
From: https://www.cnblogs.com/x-kq/p/17792385.html

相关文章

  • 用springBoot、netty写TCP客户端/服务端,并用TCP工具测试
    1.启动客户端和连接服务端packagecom.pkx.cloud.test.netty;importio.netty.bootstrap.Bootstrap;importio.netty.channel.*;importio.netty.channel.nio.NioEventLoopGroup;importio.netty.channel.socket.SocketChannel;importio.netty.channel.socket.nio.NioSock......
  • 完整教程:使用SPRING BOOT实现大文件断点续传及文件校验
    一、简介随着互联网的快速发展,大文件的传输成为了互联网应用的重要组成部分。然而,由于网络不稳定等因素的影响,大文件的传输经常会出现中断的情况,这时需要重新传输,导致传输效率低下。为了解决这个问题,可以实现大文件的断点续传功能。断点续传功能可以在传输中断后继续传输,而不需要从......
  • SpringCloud微服务多应用脚手架的搭建与部署
    最近几年SpringBoot大热,很多IT公司都开始采用SpringBoot来替换传统的SpringMVC项目。那么如何搭建一个适合开发的项目架构呢?这里我主要介绍Java程序员使用最多的两种工具进行搭建:1、MyEclipse;2、ideaMyEclipse第一步:打开MyEclipse,选择File—>New—>Other,搜索maven,点击next 第二步:......
  • druid 1.2.20发布,增强对Spring-boot-3-starter的支持
    导读这个版本修复大家比较关注的对spring-boot3的支持问题。大家按需升级Issues修复druid-spring-boot-3-starter错误,并增加自动配置的适配文件#5437#5443针对mysqlloadbalance格式的url,加上connectTimeout等属性的识别支持#5396修复socketTimeout参数不支持mysq......
  • ConcurrentHashMap的非线程安全使用
    问题业务场景:应用会创建一个<name,id>的Map并缓存,其中key,value会被其他业务模块调用,最终数据落盘到HDFS上。问题:发现一个奇怪的bug:id在Map中的值和业务表中的值有时候对不上,比如在业务表中查到一个id=100,但是在Map中找不到这个值。经过分析定位,发现问题代码在这里:(大概逻辑为,......
  • Google三驾马车之二:MapReduce
    第一次接触mr还是在入门mit6.824的lab1,最近重新读了一遍原始论文,又有了一些新的想法,简单做一些记录。作为Google分布式系统的重要组成,本篇文章核心在于map/reduce操作带来的抽象并行化,给出接口之后,编写应用程序的程序员就不需要对底层的机制做过多的处理。而在本质上,mr只是实现了......
  • 9、SpringMVC之处理静态资源
    9.1、环境搭建9.1.1、在project创建新module9.1.2、选择maven9.1.3、设置module名称和路径9.1.4、module初始状态9.1.5、配置打包方式和引入依赖注意:默认的打包方式为jar,为了能配置web资源,需要将打包方式设置为war<?xmlversion="1.0"encoding="UTF-8"?><proje......
  • myabtis+spring
    使用mybatis+spring完成数据库的增删改查首先要导入的jar包: 然后创建数据库的配置文件: 创建User类: myabtis的配置文件和映射文件:使用动态sql来完成sql语句    spring的配置文件: 创建service层和他的实现类:  最后的测试类:  ......
  • 基于SpringBoot的菜谱交流系统-计算机毕业设计源码+LW文档
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器本选题致力于开发一个菜谱交流系统,旨在帮助越来越多的人可以与他人分享自己做菜的经验和做法,并......
  • 基于Spring Boot的房产中介系统-计算机毕业设计源码+LW文档
    1.依据及意义:随着国家经济地快速增长以及城镇化步伐地加快,资讯的获取途径主要来源于互联网,而当前中国房地产市场新盘房源,现实生活中人们对对房屋的需求急剧增加。然而现代社会仍然会存在较多的中介部门,这些中介部门通常对外发布许多住房方面的资讯。可是,由于住房中介信息相对较多......