@Value拜拜:更优雅的获取springboot yml中的值

栏目: Java · 发布时间: 5年前

内容简介:偶然看到国外论坛有人在吐槽同事从配置文件获取值的方式,因此查阅了相关资料发现确实有更便于管理更优雅的获取方式。github demo地址:application.yml取代application.properties,用来配置数据可读性更强,尤其是当我们已经制定了很多的层次结构配置的时候。

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

github demo地址: springboot-yml-value

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<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());
    }
}
复制代码

测试结果如下:

@Value拜拜:更优雅的获取springboot yml中的值

4.总结

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序设计语言

程序设计语言

斯科特 / 裘宗燕 / 电子工业出版社 / 2007-6 / 99.00元

★列为全球上百所大学标准教材和首席参考书! ★图书馆必备典藏,作者Michael L.Scott 是计算机领域的著名学者,译者是北京大学的裘宗燕教授,他熟悉专业,译笔流畅,因此,这是一本难得的著、译双馨的佳作。 这是一本很有特色的教材,其核心是讨论程序设计语言的工作原理和技术。本书融合了传统的程序设计语言教科书和编译教科书的有关知识,并增加了一些有关汇编层体系结构......一起来看看 《程序设计语言》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具