网站首页 > java教程 正文
一、前言
我们在开发中会经常遇到一些可能会变的值,比如数据库的密码,一些关键链接的配置等等。
都需要我们写在配置文件中,这样可以把这些配置文件放到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() 去修改修改吧!如果不需要动态更新的,看个人情况修改
猜你喜欢
- 2024-10-01 「每日分享」内存文件映射方式读取超大文件踩坑题解析
- 2024-10-01 尚学堂百战程序员之读写配置文件教程
- 2024-10-01 Spark中读写不同类型文件(如何改文件的读写类型)
- 2024-10-01 Java中文件使用流操作基础知识(java文件流不关闭的后果)
- 2024-10-01 Java 读取txt文件生成Word文档(java读取txt文件存为字符串)
- 2024-10-01 零基础编程培训系列JAVA入门课程第十一讲Java文件处理
- 2024-10-01 java IO流读取文件并统计文件中各个字符出现的次数
- 2024-10-01 Java读取配置文件config.properties
- 2024-10-01 常见Java问题及笔试题(十八)——说一说代码中读取文件的事
- 2024-10-01 Java 中获取文件路径的方式,你知道几种?
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)