欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2023/12/15 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 springboot取yml中的值_@Value拜拜:更优雅的获取springboot yml中的值 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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中的值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。