SpringBoot读取.yml配置文件最常见的两种方式-源码及其在nacos的应用
一、前言
我们在开发中会经常遇到一些可能会变的值,比如数据库的密码,一些关键链接的配置等等。
都需要我们写在配置文件中,这样可以把这些配置文件放到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配置文件最常见的两种方式-源码及其在nacos的应用的更多相关文章
- Java基础进阶:学生管理系统数组方式分包源码实现,教师管理系统集合和数组两种方式源码实现,图书馆管理系统源码实现,现附重难点,代码实现源码,课堂笔记,课后扩展及答案
1.案例驱动模式 1.1案例驱动模式概述 (理解) 通过我们已掌握的知识点,先实现一个案例,然后找出这个案例中,存在的一些问题,在通过新知识点解决问题 1.2案例驱动模式的好处 (理解) 解决重复代码 ...
- java中读取配置文件ResourceBundle和Properties两种方式比较
今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...
- springboot 注册服务注册中心(zk)的两种方式
在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注 ...
- 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式
1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...
- java基础知识回顾之java Thread类学习(三)--java线程实现常见的两种方式实现好处:
总结:实现Runnable接口比继承Thread类更有优势: 1.因为java只能单继承,实现Runnable接口可以避免单继承的局限性 2.继承Thread类,多个线程不能处理或者共享同一个资源,但 ...
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
创建线程的第二中方式: /** * 步骤: 1定义类实现Runnable接口 2.实现Runnable接口中的run方法. 3.通过Thread类建立线程对象,并将Run ...
- SpringBoot中如何优雅的读取yml配置文件?
YAML是一种简洁的非标记语言,以数据为中心,使用空白.缩进.分行组织数据,从而使得表示更加简洁易读.本文介绍下YAML的语法和SpringBoot读取该类型配置文件的过程. 本文目录 一.YAML基 ...
- 基于Maven的SpringBoot项目实现热部署的两种方式
转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
随机推荐
- 基于RabbltMQ延迟插件实现延迟队列代码示例
上一篇文章写了docker安装RabbitMQ及延迟插件的安装,这篇的话是基于RabbitMQ延迟插件实现延迟队列的示例 那么废话不多说 直接上代码!! 首先创建延迟队列配置类 DelayedQueu ...
- Python3 collections模块
https://www.cnblogs.com/zhangxinqi/p/7921941.html http://www.wjhsh.net/meng-wei-zhi-p-8259022.html h ...
- FlinkSQL源码阅读-schema管理
在Flink SQL中, 元数据的管理分为三层: catalog-> database-> table, 我们知道Flink SQL是依托calcite框架来进行SQL执行树生产,校验,优 ...
- 【摸鱼神器】UI库秒变LowCode工具——列表篇(二)维护json的小工具
上一篇介绍了一下如何实现一个可以依赖 json 渲染的列表控件,既然需要 json 文件,那么要如何维护这个 json 文件就成了重点,如果没有好的维护方案的话,那么还不如直接用UI库. 所以需要我们 ...
- camunda BPM支持的开发和运行环境
以Camunda7.13版本为例,介绍Camunda支持的开发运行环境. 一.支持的Java开发环境 • Java版本: 8 / 9 / 10 / 11 / 12 / 13 / 14• Springb ...
- MySQL根据表前缀批量修改、删除表
注意:请先调试好,以及做好备份,再执行操作. 批量修改表 批量给前缀为 xushanxiang_content_ 的表增加一个 username 的字段: SELECT CONCAT('ALTER T ...
- adb工具
ADB:全称为Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具. 首先,下载ADB工具并安装: 下载:百度就有.下载后是个压缩包,将其拷贝到cm ...
- java的elasticsearch做高亮显示
import org.apache.commons.lang3.reflect.FieldUtils;import org.elasticsearch.action.search.SearchResp ...
- 7 什么是dubbo
什么是dubbo 快速入门dubbo 了解什么是dubbo之前,我们得先了解什么是分布式系统? <分布式系统原理与范型>定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像 ...
- Windows下通过dos来编译c语言源代码文件
笔者阅览过网上许多的推荐,基本上都是推荐cl命令,但是因为笔者是通过dev c++入门的,不想放弃dev所以就强行使用dev来实现在dos下的编译以及运行 编译 注意:这边涉及到环境变量的配置,环境变 ...