SpringBoot读取.yml配置文件最常见的两种方式()

  本篇文章为你整理了SpringBoot读取.yml配置文件最常见的两种方式()的详细内容,包含有 SpringBoot读取.yml配置文件最常见的两种方式,希望能帮助你了解 SpringBoot读取.yml配置文件最常见的两种方式。

  我们在开发中会经常遇到一些可能会变的值,比如数据库的密码,一些关键链接的配置等等。

  都需要我们写在配置文件中,这样可以把这些配置文件放到nacos上进行管理,修改nacos的配置,咱们发布的包就可以动态的进行更新了,不需要重新修改打包在重新发包!

  咱们今天就来说一说读取配置文件中的值常见的两种方法,刚刚说的动态更新配置的是第二种配置哈!@Value("${school.teacher}")不会动态更新,所以小编推荐使用第二种方式@ConfigurationProperties(prefix = "school")进行读取配置文件!下面小编 也会带大家一起演示一下不需要重启项目就可以动态的更新,在生产上非常的好用!!!

  二、第一种方式

  第一种方式比较场景,也是最简单的,就是@Value($(配置文件中的参数))

  我们首先在application.yml文件中写一个配置:

  

school:

 

   teacher: 王老师

   student: 小明

  

 

  这里key的冒号后面一定要有个空格,字符串不需要加双引号!

  我们为了方便直接在controller进行演示了!!

  

@RestController

 

  @RequestMapping("/test")

  @Slf4j

  @RequiredArgsConstructor

  public class TestController {

   @Value("${school.teacher}")

   private String teacher;

   @Value("${school.student}")

   private String student;

   @GetMapping("/testValue")

   public Result testValue(){

   return Result.success(teacher + "--- " + student);

  

 

  我们debug看一下是否可以读取到配置中的值!

  我们可以看到是有值的!

  三、第二种方式(推荐)

  这种方式是小编比较推荐的,虽然看似比@Value麻烦不少,但是更加的规范,在配合nacos的时候也可以动态的修改,会立即生效,一会小编带大家试一下哈!!为什么推荐这种方式呢,是因为spring他们都是使用这种方式进行配置的,所以跟着官方走不会有错的!!

  1. 修改yml文件

  我们刚刚修改了一下yml配置文件,让类型更加丰富!!

  

school:

 

   teacher: 王老师

   studentList:

   - 小明

   - 小刚

  

 

  2. 编写读取映射的类

  

import lombok.Data;

 

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

  import org.springframework.stereotype.Component;

  import java.util.List;

   * @author wangzhenjun

   * @date 2022/8/17 9:04

  // 要交给spring容器,不然获取不到值

  @Component

  // 配置读取yml文件中前缀以 school开头的配置可以全部读取

  @ConfigurationProperties(prefix = "school")

  // 要有get方法,不然无法获取值

  @Data

  public class School {

   // 名称要与yml一致

   private String teacher;

   private List String studentList;

  

 

  3. 在Controller进行测试

  

@RestController

 

  @RequestMapping("/test")

  @Slf4j

  @RequiredArgsConstructor

  public class TestController {

   @Autowired

   private School school;

   @GetMapping("/testProperties")

   public void testProperties(){

   log.info("读取yml的school对象:{}",school);

  

 

  4. debug进行看一下

  5. 为什么推荐第二种方式

  我们找到yml文件,按住Ctrl鼠标点击port,进去看一下spring官方是怎么配置的!

  
 

  我们来到ServerProperties这个配置类上看到:

  

public void setPort(Integer port) {

 

   this.port = port;

  

 

  我们发现port是一个成员变量,我们直接看一下这个类吧!

  

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)

 

  public class ServerProperties {

   * Server HTTP port.

   private Integer port;

  

 

  我们看到spring也是使用第二种方式进行读取yml的内容的!!

  四、验证第二种方式实时更新

  nacos这里小编就不带大家整合到项目中了,小编直接演示效果哈!

  1. nacos上配置yml

  

school:

 

   teacher: 王老师

   studentList:

   - 小明

   - 小刚

  

 

  
 

  读取的配置和第二种方式那个School一样!

  2. Controller获取

  

@RestController

 

  @RequiredArgsConstructor

  @RequestMapping("/zone")

  public class ZoneController {

   @Autowired

   private School school;

   @GetMapping("/test")

   public R test() {

   return R.ok(school);

  

 

  3. postman测试

  4. 修改配置

  我们修改配置不重启项目
 

  
 

  在次测试:
 

  
 

  大功告成!完结撒花喽!!

  第二种方式:@ConfigurationProperties是非常推荐大家使用的,能够规范和生产环境中动态生效!!真的很香啊!!项目中的@Value()去修改修改吧!!如果不需要动态更新的,看个人情况修改哈!!

  有缘人才可以看得到的哦!!!

  点击访问!小编自己的网站,里面也是有很多好的文章哦!

  以上就是SpringBoot读取.yml配置文件最常见的两种方式()的详细内容,想要了解更多 SpringBoot读取.yml配置文件最常见的两种方式的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: