偶然看到国外论坛有人在吐槽同事从配置文件获取值的方式,因此查阅了相关资料发现确实有更便于管理更优雅的获取方式。

1.什么是yml文件

application.yml取代application.properties,用来配置数据可读性更强,尤其是当我们已经制定了很多的层次结构配置的时候。

下面是一个非常基本的yml文件:

server:

url: http://localhost

myapp:

name: MyApplication

threadCount: 4

...

复制代码

等同于以下的application.properties文件:

server.url=http://localhost

server.myapp.name=MyApplication

server.myapp.threadCount=4

...

复制代码

demo中的yml文件如下:

server:

url: http://myapp.org

app:

name: MyApplication

threadCount: 10

users:

- Jacob

- James

复制代码

2.yml属性获取配置

访问yml属性的一种方法是使用 @Value("$ {property}") 注释,但是随着配置树形结构以及数量的增加,代码可读性也随之降低,更不利于bean的管理。笔者发现另一种优雅的方法可以确保强类型bean的管理以及更方便的验证我们的应用程序配置。

为了实现这一点,我们将创建一个 @ConfigurationProperties 类ServerProperties,它映射一组相关的属性:

import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;

import java.util.List;

/**

* @program: simple-demo

* @description: 映射属性 (server节点)

* @author: CaoTing

* @date: 2019/6/3

**/

@Data

@ConfigurationProperties("server")

public class ServerProperties {

private String url;

private final App app = new App();

public App getApp() {

return app;

}

public static class App {

private String name;

private String threadCount;

private List users = new ArrayList<>();

// TODO getter and setter

}

}

复制代码

请注意,我们可以创建一个或多个@ConfigurationProperties类。

定义我们的springboot 注册配置类ApplicationConfig:

import org.springframework.boot.context.properties.EnableConfigurationProperties;

import org.springframework.context.annotation.Configuration;

/**

* @program: simple-demo

* @description: 注册所有映射属性类 { }中用逗号分隔即可注册多个属性类

* @author: CaoTing

* @date: 2019/6/3

**/

@Configuration

@EnableConfigurationProperties({ServerProperties.class})

public class ApplicationConfig {

}

复制代码

这里已经提到了要在@EnableConfigurationProperties中注册的属性类列表。

3.访问yml属性

现在可以通过使用创建的@ConfigurationProperties bean来访问yml属性。可以像任何常规的Spring bean一样注入这些属性bean,测试类如下:

import com.caotinging.ymldemo.application.YmlValueApplication;

import com.caotinging.ymldemo.config.ServerProperties;

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.SpringJUnit4ClassRunner;

/**

* @program: simple-demo

* @description: 单元测试类

* @author: CaoTing

* @date: 2019/6/3

**/

@RunWith(SpringJUnit4ClassRunner.class)

@SpringBootTest(classes = YmlValueApplication.class)

public class AppYmlValueTest {

@Autowired

private ServerProperties config;

@Test

public void printConfigs() {

System.out.println(this.config.getUrl());

System.out.println(this.config.getApp().getName());

System.out.println(this.config.getApp().getThreadCount());

System.out.println(this.config.getApp().getUsers());

}

}

复制代码

测试结果如下:

4.总结

欢迎移步github上手测试哦,地址在文首。本文原创,转载请附上原文链接,不然我会生气的。有帮助的话点个赞吧,笔芯。

springboot取yml中的值_@Value拜拜:更优雅的获取springboot yml中的值相关推荐

  1. 微信小程序修改数组中的元素_微信小程序——this.setData()动态修改数组中的某一值...

    微信小程序--this.setData()动态修改数组中的某一值S8v编程技术_踩坑日志_进阶指南_无知人生 大家是不是都觉得微信小程序的开发方式和 vue react 这种框架的开发方式很像?S8v ...

  2. 无返回值_只需一步,在Spring Boot中统一Restful API返回值格式与处理异常

    统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: public cl ...

  3. 深度学习中交叉熵_深度计算机视觉,用于检测高熵合金中的钽和铌碎片

    深度学习中交叉熵 计算机视觉 (Computer Vision) Deep Computer Vision is capable of doing object detection and image ...

  4. python怎么检查dataframe 含有none值_关于python:在Pandas DataFrame中用None替换无效值...

    在Python的Pandas中,是否有任何方法可以用None替换值? 您可以使用df.replace('pre', 'post')并将其替换为另一个值,但是如果要替换为None值则无法执行此操作,如果 ...

  5. python中str函数_一文让你彻底搞懂Python中__str__和__repr__?

    __str__和__repr__的异同? 字符串的表示形式 我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认.这就是"字符串表示形式". ...

  6. java double long 取值_由一道题引起的思考? java中 long 和double都是64位。为什么double表示的范围大那么多呢?...

    由一道题引起的思考? java中 long 和double都是64位.为什么double表示的范围大那么多呢? 百度标准答案是这样子的: double是n*2^m(n乘以2的m次方)这种形式存储的,只 ...

  7. 两次结果的绝对差值_多图示例:如何呈现论文结果中的各种图表

    本文根据<Journal of the American College of Cardiology>上曾发表的一篇文章<Making Sense of Statistics in ...

  8. lua 调用文件中的函数调用_四、C++获得Lua的变量和Table的值

    上两篇文章都已经把Lua和C++函数的调用讲完了,这篇开始讲变量和Table的调用. 这篇文章主要是讲C++怎么调用获得Lua中的变量和Table的值,并且把lua中的值打印出来. 一.直接上代码: ...

  9. oracle中修改多个字段默认值_利用VBA代码在已有的数据表中删除、添加、修改字段...

    大家好,今日继续给大家讲解VBA数据库解决方案的第21讲,如何利用VBA代码在已有的数据表中删除,添加,修改字段.这个内容是操作数据库的一项必修的内容,还望大家在实际工作中多利用,所以这节的知识,对于 ...

最新文章

  1. pandas基于时序数据计算模型预测推理需要的统计数据(累计时间、长度变化、变化率、方差、均值、最大、最小等):范围内的统计量、变化率、获得数据集最后的几条数据的统计量、变化率、获得范围内的统计量
  2. 简单定制自己的Centos系统(第三版)
  3. 【Paper】2020_Qize_Design of UGV Trajectory Tracking Controller in UGV-UAV Cooperation
  4. python画图表的库_「Python」python绘制图表
  5. nlm算法matlab代码_遗传算法GA的MATLAB代码
  6. 深度学习(28)随机梯度下降六: 多输出感知机梯度
  7. C#实现RTP数据包传输
  8. mysql教程详解之多表联合查询,MYSQL教程mysql多表联合查询返回一张表的内容实现代码...
  9. AliOS Things KV组件的写平衡特性 1
  10. 栈方法 LIFO - 队方法 FIFO
  11. 阿里影业出品影片《1917》斩获奥斯卡多项大奖 有望国内院线上映
  12. 基于JAVA+Servlet+JSP+MYSQL的毕业生去向管理系统
  13. android软件欢迎界面,Android应用中实现一个软件启动的欢迎界面
  14. sql 训练及总结
  15. 流媒体技术学习笔记之(十六)H264编码profile level控制
  16. python语法学习第九天--else和with语句
  17. 通用大数据架构-_通用做法-第4部分
  18. Mac实践--MAC搭建FTP服务器
  19. 小程序-语音播放动画-animation
  20. win7计算机闪屏,win7电脑闪屏是什么原因

热门文章

  1. 在腾讯云轻量云服务器上搭建mysql数据库
  2. 模态对话框和非模态对话框区别
  3. IOS开发基础之解压缩文件技术
  4. SOL注入——HTTP头部注入(2)(七)
  5. git 生成多个patch_如何用git命令生成Patch和打Patch
  6. android读写文本文件,Android读写文件
  7. java8 例外网站_Java8兰巴达斯和例外
  8. 开发pc页面_uniapp支持PC版真正的一统天下来了全端支持不是梦
  9. 内存泄漏的原因及解决办法_编程基础 | C++片段 指针、多态和内存分配
  10. idea撤销与恢复快捷键_IntelliJ IDEA 重做快捷键和配置哲学