首页 > 作文

使用Spring从YAML文件读取内容映射为Map方式

更新时间:2023-04-05 01:30:54 阅读: 评论:0

目录
从yaml文件读取内容映射为mapspring框架中的yaml文件从yaml文件内容注入map@configurationp挽回女友的话roperties与@value配置文件yml中的map形式yml中的格式创建一个类引用打印

从yaml文件读取内容映射为map

如何在spring boot中从yaml文件注入到map。

首先,将对spring框架中的yaml文件有一些了解。 然后,通过一个实际示例展示如何将yaml属性绑定到map。

spring框架中的yaml文件

使用yaml文件存储外部配置数据是一种常见的做法。 基本上,spring支持使用yaml文档作为属性的替代方法,并在后台使用snakeyaml对其进行解析。

看看典型的yaml文件是什么样的:

rver: port: 8090 application:  name: myapplication  url: http://myapplication.com

从上面可以看出,yaml文件是不言自明的,更易于阅读。 实际上,yaml提供了一种简洁的方式来存储分层配置数据。

默认情况下,spring boot在应用程序启动时从application.properties或application.yml读取配置属性。 但是,我们可以使用@propertysource加载自定义的yaml文件。

既然熟悉了什么是yaml文件,看看如何在spring boot中将yaml属性作为map注入。

从yaml文件内容注入map

spring boot通过提供一个方便的注解@configurationproperties,将数据的外部化提车站 李健升到了一个新的水平。光电信息工程 引入此注解是为了轻松地将配置文件中的外部属性直接注入java对象。

接下来将介绍如何使用@configurationproperties注解将yaml属性绑定到bean类中。

首先,在application.yml中定义一些键值属性:

rver: application:  name: injectmapfromyaml  url: http://injectmapfromyaml.dev  description: how to inject a map from a yaml file in spring boot config:  ips:   - 10.10.10.10   - 10.10.10.11   - 10.10.10.12   - 10.10.10.13  filesystem:   - /dev/root   - /dev/md2   - /dev/md4 urs:  root:   urname: root   password: rootpass  guest:   urname: guest   password: guestpass

其次,创建一个bean类maprverproperties来封装将配置属性绑定到maps的逻辑:

@configuration@configurationproperties(prefix = "rver")@datapublic class maprverproperties {  private map<string, string> application;  private map<string, list<string>> config体育教师工作计划;  private map<string, credential> urs;  @data  public static class credential {    private string urname;    private string password;  }}

如上面所见,我们用@configurationproperties装饰了maprverproperties类。 这样,告诉spring将具有指定前缀的所有属性映射到maprverproperties的对象。

测试

@runwith(springrunner.class)@springboottestpublic class mapfromyamlintegrationtest {  @autowired  private maprverproperties maprverproperties;  @test  public void whenyamlfileprovidedtheninjectsimplemap() {    asrtthat(maprverproperties.getapplication())        .containsonlykeys("name", "url", "description");    asrtthat(maprverproperties.getapplication()        .get("name")).iqualto("injectmapfromyaml");  }  @test  public void whenyamlfileprovidedtheninjectcomplexmap() {    asrtthat(maprverproperties.getconfig()).hassize(2);    asrtthat(maprverproperties.getconfig()        .get("ips")    船舶电工    .get(0)).iqualto("10.10.10.10");    asrtthat(maprverproperties.geturs()        .get("root")        .geturname()).iqualto("root");  }}

@configurationproperties与@value

快速比较@configurationproperties和@value。

尽管两个注解均可用于从配置文件注入属性,但它们却大不相同。 这两个注释之间的主要区别在于,每个注释具有不同的用途。

简而言之,@value允许我们通过键直接注入特定的属性值。 但是,@configurationproperties批注将多个属性绑定到特定对象,并提供通过映射对象对属性的访问。

通常,在注入配置数据时,spring建议在@value上使用@configurationproperties。 @configurationproperties提供了一种在结构化对象中集中和分组配置属性的好方法,以后我们可以将其注入其他bean。

配置文件yml中的map形式

yml中的格式

tes:  maps: {key1: 12,key2: 34}

或者

tes:  maps:    key1: 15    key2: 2

创建一个类

然后创建对应类型的字段(注意下这个类的那两个注释了的注解)

package com.etc.lzg;import lombok.data;import org.springframework.boot.context.properties.configurationproperties;import org.springframework.context.annotation.configuration;import org.springframework.context.annotation.propertysource;import org.springframework.stereotype.component;import java.util.map;@data@component//@configuration //这个我这里虽然存在时能成功,不过我注释了也是可以的,这个是看网上有人写就跟着写上的//@propertysource(value = {"classpath:/application.yml"}, encoding = "utf-8") //有的人是写了这个注解能成功,但是我这边不能有这个注解,有的话,就连编译都会报错@configurationproperties(prefix = "tes")public class maptest {    private map<string, string> maps;}

引用

package com.etc.lzg;import org.junit.test;import org.junit.runner.runwith;import org.springframework.beans.factory.annotation.autowired;import org.springframework.boot.test.context.springboottest;import org.springframework.test.context.junit4.springrunner;@runwith(springrunner.class)@springboottestpublic class lzgapplicationtests {    @autowired    private maptest maptest;        @test    public void contextloads() {        system.out.println(maptest.tostring());        system.out.println("key1="+maptest.getmaps().get("key1"));    }}

打印

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-05 01:30:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/342e0e4e7fc27a8fe3d27db77cbffbe4.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:使用Spring从YAML文件读取内容映射为Map方式.doc

本文 PDF 下载地址:使用Spring从YAML文件读取内容映射为Map方式.pdf

标签:属性   文件   注解   绑定
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图