首页 > 编程语言 >SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用

SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用

时间:2022-08-22 09:44:43浏览次数:101  
标签:school 读取 配置文件 public teacher 源码 yml SpringBoot

一、前言

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

都需要我们写在配置文件中,这样可以把这些配置文件放到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()去修改修改吧!!如果不需要动态更新的,看个人情况修改哈!!


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

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

标签:school,读取,配置文件,public,teacher,源码,yml,SpringBoot
From: https://www.cnblogs.com/wang1221/p/16611778.html

相关文章

  • React 源码-React 事件全解
    事件系统reactv17事件绑定事件绑定在函数setInitialDOMPropertiessetInitialDOMProperties将在complete阶段执行functionsetInitialDOMProperties(tag:st......
  • vscode配置文件
    {//vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detectIndentation":false,//重新设定tabsize"editor.tabSize":4,//#值设置为true时......
  • 蚂蚁金服开源的这份SpringBoot笔记,曾在24小时内GitHub星标48k
    前言Spring的影响力想必就不用小编多说了,今天要跟大家说的是SpringBoot。SpringBoot作为目前Spring技术体系中炙手可热的框架之一,已经是开发者们的必备神器了。在实际......
  • Linux虚拟机Nginx代理vue前端与SpringBoot后端资源
    1.Nginx安装配置详细参见菜鸟教程:https://www.runoob.com/linux/nginx-install-setup.html2.nginx.conf内容usernginx;worker_processes1;#设置值和CPU核心数......
  • VUE+SpringBoot环境准备
    一、nodejs下载地址官网:https://nodejs.org/zh-cn/其它版本:https://nodejs.org/zh-cn/download/releases/源码地址:https://github.com/nodejs二、vscode下载地......
  • SpringBoot项目在不同环境下的配置以及打包方式
    一、概述配置三个配置文件,只需要打包的时候,根据不同环境打包不同的配置文件application.yml是启动服务时,Spring会自动加载的配置文件application-de......
  • idea+SpringBoot使用过程中的问题集合
    1.跨域访问外部接口?使用Nginx代理(详细参见:https://www.cnblogs.com/ZhaoHS/p/16594619.html);合并部署,统一从后端访问第三方接口(合并部署详见:https://www.cnblo......
  • Linux 基于源码安装 Redis
    1.下载Redis:前往Redis官网复制Redis相应版本的下载链接,到终端下载2.进入到指定目录,下载redis.tar.gz包,运行wget+复制的下载链接 例如:wgethttps://d......
  • Maven中xml配置文件导出到target失败问题解决方案
    Maven中xml配置文件导出到target失败问题解决方案在pom.xml中加入下面代码<!--在build中配置resources,来防止我们资源导出失败的问题--><build><resources>......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......