温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何获取springbootyml中的值

发布时间:2021-07-24 15:22:01 来源:亿速云 阅读:264 作者:Leah 栏目:编程语言

这篇文章给大家介绍如何获取springbootyml中的值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1.什么是yml文件

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

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

server: url: http://localhost  myapp:  name: MyApplication  threadCount: 4...

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

server.url=http://localhostserver.myapp.name=MyApplicationserver.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<String> 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上手测试哦,地址在文首。有帮助的话点个赞吧,笔芯。转载需附上原文链接。

5.补充

因为有小伙伴不太清楚具体用途。笔者补充一下两者的优缺点吧。

Spring Boot通过ConfigurationProperties注解从配置文件中获取属性。从上面的例子可以看出ConfigurationProperties注解可以通过设置prefix指定需要批量导入的数据。支持获取字面值,集合,Map,对象等复杂数据。ConfigurationProperties注解还有其他特点呢?它和Spring的Value注解又有什么区别呢?

一)ConfigurationProperties和@Value优缺点

ConfigurationProperties注解的优缺点

一、可以从配置文件中批量注入属性;

二、支持获取复杂的数据类型;

三、对属性名匹配的要求较低,比如user-name,user_name,userName,USER_NAME都可以取值;

四、支持JAVA的JSR303数据校验;

五、缺点是不支持SpEL表达式;

六、确保强类型bean的管理,更方便的验证程序配置;

Value注解的优缺点正好相反,它只能一个个配置注入值;不支持数组、集合等复杂的数据类型;不支持数据校验;对属性名匹配有严格的要求。最大的特点是支持SpEL表达式,使其拥有更丰富的功能。

关于如何获取springbootyml中的值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI