@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上手测试哦,地址在文首。本文原创,转载请附上原文链接,不然我会生气的。有帮助的话点个赞吧,笔芯。


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

查看所有标签

猜你喜欢:

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

Data Mining

Data Mining

Jiawei Han、Micheline Kamber、Jian Pei / Morgan Kaufmann / 2011-7-6 / USD 74.95

The increasing volume of data in modern business and science calls for more complex and sophisticated tools. Although advances in data mining technology have made extensive data collection much easier......一起来看看 《Data Mining》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码