Spring Boot详解配置文件的用途与用法
作者:独一无二的哈密瓜 发布时间:2022-08-01 20:37:27
1. SpringBoot 配置文件
1.1 配置文件的作用
配置文件中配置了项目中重要的数据, 例如:
数据库的连接信息 (用户名密码)
项目的启动端口
第三方系统的调用密钥等信息
用于发现和定位问题的普通日志和异常日志等
Spring Boot项目没有配置信息, 就不能连接和操作数据库, 甚至不能保存可以用于排查问题的关键日志. 所以配置文件非常重要.
1.2 配置文件的格式
在Spring Boot 中配置文件主要分为两种:
.properties
(主要是key=value格式).yml
(主要是key: value格式)
注意:
当项目中既有
.properties
和.yml
, 且两个配置文件中有相同的配置项, Spring Boot 会优先考虑.properties
, 因为.properties
的优先级更高一些.一个项目中允许存在两种不同的配置文件,
.properties
.yml
, 但是在项目中建议只使用一种配置文件的格式.
1.3 properties 配置文件说明
1.3.1 properties 基本语法
properties 是以 key=value
这种格式配置的.
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/2022-6-1
spring.datasource.username=root
spring.datasource.password=1234
配置文件的注释信息使用 “#”
1.3.2 读取配置文件
读取配置文件的内容, 可以使用 @Value
注解来实现
@Value
注解使用 "${}"
的格式读取.
@Component
public class Read implements InitializingBean {
@Value("${server.port}")
private String port;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println();
System.out.println(port);
System.out.println();
}
}
1.4 yml 配置文件说明
yml 是 YMAL 是缩写, 它的全称是 Yet Another Markup Language, 译为 另一种标记语言.
1.4.1 yml 基本语法
yml 是树形结构的配置文件, 它的基础语法是 key: value
, 这里的:
后面跟着一个空格.
server:
port: 9090
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/2022-6-1
username: root
password: 1234
1.4.2 yml 使用进阶
# ~代表null
null.value: ~
查看一段代码
string:
str1: Hello \n World
str2: 'Hello \n World'
str3: "Hello \n World"
读取yml中的这段代码
@Component
public class Read1 implements InitializingBean {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println();
System.out.println("str1: "+str1);
System.out.println("str2: "+str2);
System.out.println("str3: "+str3);
System.out.println();
}
}
运行结果:
字符串加上双引号, 会执行\n 换行.
1.4.3 配置对象
yml 中配置对象
student:
id: 1
name: zhangsan
age: 18
读取配置的对象, 就需要用到另一个注解: @ConfigurationProperties
@Component
@ConfigurationProperties("student")
public class User {
private int id;
private String name;
private int age;
// 一堆getter setter
}
读取
@Component
public class Read2 implements InitializingBean {
@Autowired
private Student student;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println();
System.out.println(student);
System.out.println();
}
}
1.4.4 配置集合
yml 中 配置集合
mylist:
colors:
- RED
- GREEN
- BLACK
读取配置集合
@Component
@ConfigurationProperties("mylist")
public class MyList {
private List<String> colors;
// 一堆getter 和 setter
}
打印代码
@Component
public class Read3 implements InitializingBean {
@Autowired
private MyList myList;
@Override
public void afterPropertiesSet() throws Exception {
for (String val : myList.getColors()){
System.out.println(val);
}
}
}
1.4.5 yml的另一种写法(行内写法)
配置对象
student: {id: 1,name: zhangsan,age: 18}
配置集合
mylist: {colors: [RED,GREEN,BLACK]}
1.5 properties 和 yml 比较
properties
的语法更复杂, yml
语法更简洁
yml通用性更好, 支持更多的语言, 如 Java, Go, Python等
yml支持更多的数据类型
yml格式的配置文件写的时候容易出错(在:之后有一个空格), 而properties写法传统比较复制,但不太容易出错
2. 读取 SpringBoot 配置文件的方法
2.1 使用 @Value 读取配置文件
只能读取一个
@Component
public class Read implements InitializingBean {
@Value("${server.port}")
private String port;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println();
System.out.println(port);
System.out.println();
}
}
2.2 使用@ConfigurationProperties
直接在类上写
@Component
@ConfigurationProperties("mylist")
public class MyList {
private List<String> colors;
public List<String> getColors() {
return colors;
}
public void setColors(List<String> colors) {
this.colors = colors;
}
}
2.3 @PropertySource读取指定配置文件
jdbc.username=root2
jdbc.password=root1
@Component
@PropertySource(value = {"classpath:application.properties"})
public class JDBC implements InitializingBean {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(username + " " + password);
}
}
来源:https://wangzhi430.blog.csdn.net/article/details/125085869
猜你喜欢
- 由于工作中 使用 MultipartFile 与现有的一些上传文件组件冲突所以使用其他的接收上传文件的方法.首先我把 M
- 本文实例讲述了java实现List中对象排序的方法。分享给大家供大家参考,具体如下:package com.test; import jav
- @RequestMapping和@GetMapping @PostMapping的区别最近学习看一些代码,发现对于发送请求这件事,有的地方用
- 在整合SpringBoot和Mybatis-plus时,想写自定义的sql,所以创建了Mapper.xml文件,但是启动后却老是报错:org
- 概述在Winform中从后台添加控件相对比较容易,但是在WPF中,我们知道界面是通过XAML编写的,如何把后台写好的控件动态添加到前台呢?本
- Java的动态绑定所谓的动态绑定就是指程执行期间(而不是在编译期间)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。java继承
- 本文实例讲述了Java深度复制功能与用法。分享给大家供大家参考,具体如下:写在前面:什么是深度复制?在Java里面,在创建一个对象,我们通常
- 在阿里开发手册的建表规约中有说明,数据库表中应该都要有create_time、update_time字段;那么在开发中,对于这些共有字段的处
- 倒序拼接字符串@ApiOperation("分页查询") @GetMapping(value
- 今天聊一个小伙伴在星球上的提问:问题不难,解决方案也有很多,因此我决定撸一篇文章和大家仔细说说这个问题。1. 配置文件位置首先小伙伴们要明白
- 一. 前言最近我发现了一个事情,那就是在面试笔试中,好多公司都喜欢在String字符串上出问题,涉及到方方面面的知识,包括其中的一些常用方法
- 本人是从事互联网金融行业的,所以会接触到一些金融类的问题,常见的一种就是数字转汉字大小写的问题。所以抽空就写了一个小小的工具类,实现了数字转
- import java.io.ByteArrayInputStream; import java.io.FileOutputSt
- 文章来源:csdn 作者:chensheng913对于Java语言,最体贴的一项设计就是它并没有打算让人们为了写程序而写程序——人们也需要考
- 前言当您使用LINQ来处理数据库时,这种体验是一种神奇的体验,对吗?你把数据库实体像一个普通的收集,使用Linq中像Where,Select
- 下载maven 解压路径: 打开环境变量:右键此电脑-属性-高级系统设置-高级-环境变量添加以下系统变量:测试:win+
- 1、继承Thread类方式这种方式适用于执行特定任务,并且需要获取处理后的数据的场景。举例:一个用于累加数组内数据的和的线程。public
- Java调用天气Webservice的小应用废话不多说,直接贴代码: CityReq.javapackage com.weathe
- 前言消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分
- 一、Optional类的来源到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公