av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot2讀取配置常用方法代碼實(shí)例

瀏覽:2日期:2023-08-01 14:58:21

1. 前言

在Spring Boot項(xiàng)目中我們經(jīng)常需要讀取application.yml配置文件的自定義配置,今天就來羅列一下從yaml讀取配置文件的一些常用手段和方法。

2. 使用@Value注解

首先,會(huì)想到使用@Value注解,該注解只能去解析yaml文件中的簡(jiǎn)單類型,并綁定到對(duì)象屬性中去。

felord: phone: 182******32 def: name: 碼農(nóng)小胖哥 blog: felord.cn we-chat: MSW_623 dev: name: 碼農(nóng)小胖哥 blog: felord.cn we-chat: MSW_623 type: JUEJIN

對(duì)于上面的yaml配置,如果我們使用@Value注解的話,冒號(hào)后面直接有值的key才能正確注入對(duì)應(yīng)的值。例如felord.phone我們可以通過@Value獲取,但是felord.def不行,因?yàn)閒elord.def后面沒有直接的值,它還有下一級(jí)選項(xiàng)。另外@Value不支持yaml松散綁定語法,也就是說felord.def.weChat獲取不到felord.def.we-chat的值。

@Value是通過使用Spring的SpEL表達(dá)式來獲取對(duì)應(yīng)的值的:

// 獲取 yaml 中 felord.phone的值 并提供默認(rèn)值 UNKNOWN@Value('${felord.phone:UNKNOWN}')private String phone;

@Value的使用場(chǎng)景是只需要獲取配置文件中的某項(xiàng)值的情況下,如果我們需要將一個(gè)系列的值進(jìn)行綁定注入就建議使用復(fù)雜對(duì)象的形式進(jìn)行注入了。

3. 使用@ConfigurationProperties注解

@ConfigurationProperties注解提供了我們將多個(gè)配置選項(xiàng)注入復(fù)雜對(duì)象的能力。它要求我們指定配置的共同前綴。比如我們要綁定felord.def下的所有配置項(xiàng):

package cn.felord.yaml.properties;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;/** * @author felord.cn */@Data@ConfigurationProperties(PREFIX)public class FelordDefProperties { static final String PREFIX = 'felord.def'; private String name; private String blog; private String weChat;}

我們注意到我們可以使用weChat接收we-chat的值,因?yàn)檫@種形式支持從駝峰camel-case到短橫分隔命名kebab-case的自動(dòng)轉(zhuǎn)換。

如果我們使用@ConfigurationProperties的話建議配置類命名后綴為Properties,比如Redis的后綴就是RedisProperties,RabbitMQ的為RabbitProperties。

另外我們?nèi)绻脒M(jìn)行嵌套的話可以借助于@NestedConfigurationProperty注解實(shí)現(xiàn)。也可以借助于內(nèi)部類。這里用內(nèi)部類實(shí)現(xiàn)將開頭yaml中所有的屬性進(jìn)行注入:

package cn.felord.yaml.properties;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import static cn.felord.yaml.properties.FelordProperties.PREFIX;/** * 內(nèi)部類和枚舉配置. * * @author felord.cn */@Data@ConfigurationProperties(PREFIX)public class FelordProperties { static final String PREFIX = 'felord'; private Def def; private Dev dev; private Type type; @Data public static class Def { private String name; private String blog; private String weChat; } @Data public static class Dev { private String name; private String blog; private String weChat; } public enum Type { JUEJIN, SF, OSC, CSDN }}

單獨(dú)使用@ConfigurationProperties的話依然無法直接使用配置對(duì)象FelordDefProperties,因?yàn)樗]有被注冊(cè)為Spring Bean。我們可以通過兩種方式來使得它生效。

3.1 顯式注入Spring IoC

你可以使用@Component、@Configuration等注解將FelordDefProperties注入Spring IoC使之生效。

package cn.felord.yaml.properties;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import static cn.felord.yaml.properties.FelordDefProperties.PREFIX;/** * 顯式注入Spring IoC * @author felord.cn */@Data@Component@ConfigurationProperties(PREFIX)public class FelordDefProperties { static final String PREFIX = 'felord.def'; private String name; private String blog; private String weChat;}

3.2 使用@EnableConfigurationProperties注冊(cè)

我們還可以使用注解@EnableConfigurationProperties進(jìn)行注冊(cè),這樣就不需要顯式聲明配置類為Spring Bean了。

package cn.felord.yaml.configuration;import cn.felord.yaml.properties.FelordDevProperties;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Configuration;/** * 使用 {@link EnableConfigurationProperties} 注冊(cè) {@link FelordDevProperties}使之生效 * @author felord.cn */@EnableConfigurationProperties({FelordDevProperties.class})@Configurationpublic class FelordConfiguration {}

該注解需要顯式的注冊(cè)對(duì)應(yīng)的配置類。

3.3 使用@ConfigurationPropertiesScan掃描

在Spring Boot 2.2.0.RELEASE中提供了一個(gè)掃描注解@ConfigurationPropertiesScan。它可以掃描特定包下所有的被@ConfigurationProperties標(biāo)記的配置類,并將它們進(jìn)行IoC注入。

package cn.felord.yaml;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.ConfigurationPropertiesScan;import org.springframework.boot.context.properties.EnableConfigurationProperties;/** * {@link ConfigurationPropertiesScan} 同 {@link EnableConfigurationProperties} 二選一 * * @see cn.felord.yaml.configuration.FelordConfiguration * @author felord.cn */@ConfigurationPropertiesScan@SpringBootApplicationpublic class SpringBootYamlApplication { public static void main(String[] args) { SpringApplication.run(SpringBootYamlApplication.class, args); }}

這非常適合自動(dòng)注入和批量注入配置類的場(chǎng)景,但是有版本限制,必須在2.2.0及以上。

3.4 Environment

Spring Boot項(xiàng)目的話也可以通過org.springframework.core.env.Environment 提供的getProperty(String key)來獲取,一般并不是很常用。

4. 總結(jié)

日常開發(fā)中單個(gè)屬性推薦使用@Value,如果同一組屬性為多個(gè)則推薦@ConfigurationProperties。需要補(bǔ)充一點(diǎn)的是@ConfigurationProperties還支持使用JSR303進(jìn)行屬性校驗(yàn)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 91成人在线视频 | 在线午夜 | 日韩一区不卡 | 日韩在线一区二区 | 精品国产乱码久久久久久蜜退臀 | 国产精品综合视频 | 91精品国产乱码久久蜜臀 | 一区二区三区欧美 | 国产精品美女久久久 | 免费观看av | 国产精品视频不卡 | 91久久久久久久久久久 | 日韩欧美一级精品久久 | 国产中文字幕在线观看 | 久久久久免费精品国产小说色大师 | 亚洲成人国产 | 精品成人一区二区 | 日韩成人免费视频 | 国产精品99久久久久久www | 日韩中文字幕一区二区 | 狠狠综合久久av一区二区小说 | 华丽的挑战在线观看 | 国产成人精品999在线观看 | 久久精品99国产精品日本 | 亚洲精品视频免费观看 | 99热这里有精品 | 国产伦精品一区二区三区高清 | 欧美精品中文字幕久久二区 | av电影一区二区 | 亚洲va欧美va人人爽午夜 | 免费观看www7722午夜电影 | 99国产精品99久久久久久 | aa级毛片毛片免费观看久 | 亚洲欧美一区二区三区国产精品 | 91不卡 | 日韩欧美大片在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产亚洲精品精品国产亚洲综合 | 日日骚网 | 男人久久天堂 | 成人午夜网站 |