如何在spring boot中从yaml文件注入到map。
首先,将对spring框架中的yaml文件有一些了解。 然后,通过一个实际示例展示如何将yaml属性绑定到map。
使用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注入。
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。
尽管两个注解均可用于从配置文件注入属性,但它们却大不相同。 这两个注释之间的主要区别在于,每个注释具有不同的用途。
简而言之,@value允许我们通过键直接注入特定的属性值。 但是,@configurationproperties批注将多个属性绑定到特定对象,并提供通过映射对象对属性的访问。
通常,在注入配置数据时,spring建议在@value上使用@configurationproperties。 @configurationproperties提供了一种在结构化对象中集中和分组配置属性的好方法,以后我们可以将其注入其他bean。
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 条评论) |