SpringBoot配置文件(properties & yml)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: SpringBoot配置文件(properties & yml)

1.配置⽂件作⽤

整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如:数据库的连接信息(包含⽤户名和密码的设置);项⽬的启动端⼝;第三⽅系统的调⽤秘钥等信息;⽤于发现和定位问题的普通⽇志和异常⽇志等。

如果没有配置信息,那么 Spring Boot 项⽬就不能连接和操作数据库,甚⾄是不能保存可以⽤于排查问题的关键⽇志,所以配置⽂件的作⽤是⾮常重要的。

2.配置文件的分类:

1、系统的配置文件,比如连接字符串、比如日志的相关设置,系统定义好的。

2、用户自定义的。

3.配置文件的格式:

Spring Boot 配置⽂件主要分为以下两种格式:

.properties

.yml

如下图所示:

其中properties 类型的配置⽂件就属于⽼款,也是创建 Spring Boot 项⽬时默认的⽂件格式,⽽ yml 属于新版款式。理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项⽬中时,如果配置⽂件中出现了同样的配置,⽐如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载完.properties ⽂件之后,也会加载 .yml ⽂件的配置信息。 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)。

4.为配置⽂件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项⽬了,并且 yml 的配置⽂件就有提示了。但默认情况下是不⽀持 properties 格式的⽇志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。

5.properties 配置文件的基本语法

Key=Value格式,properties 是以键值的形式配置的,key 和 value 之间是以“=”连接的,如:

6.关于properies 中文乱码的问题处理:


将原来的application. properies删除掉,重新再创建一个application. properies。因为之前的配置文件已经是不支持中文编码的文件格式化,设置编码再创建application.properies 之后,所以后设置的编码不会改变原来的旧的 application.properies文件,所以需要先将之前的配置文件删除掉重新创建。

7.读取单个的配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。@Value 注解使⽤“${}”的格式读取,如下代码所示:

@Component 
public class Read { 
   @Value("${server.port}") 
   private String port; 
   @PostConstruct 
   public void postConstruct() { 
       System.out.println("port:" + port); 
  } 
}

@Component 在 Spring Boot 启动时候会注⼊到框架中,注⼊到框架中时会执⾏ @PostConstruct 初始化⽅法,这个时候就能读取到配置信息了。

8.properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下所示:

Spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false;
Spring.datasource.name=root
Spring.datasource.password=1234

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息。想要解决这个问题,就可以使⽤yml 配置⽂件的格式化了。

9.yml 配置⽂件特点以及语法

特点:写法简单,可读性更高;支持更多的数据类型;可以跨语言使用,java/golang/python等等

语法:key: value;key和value之间用冒号+空格连接。

spring: 
  datasource: 
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    name: root
    Password: 1234

10.yml可以配置不同数据类型及 null

# 字符串 
string.value: Hello 
# 布尔值,true或false 
boolean.value: true 
boolean.value1: false 
# 整数 
int.value: 10 
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制 
# 浮点数 
float.value: 3.14159 
float.value1: 314159e-5 # 科学计数法 
# Null,~代表null 
null.value: ~

11.yml单、双引号的问题:

yml 中如果使用了双引号就会按照(原〉语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义,比如n -> \\n(转义)处理。

12.yml配置读取

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可。

13.yml配置对象

以在 yml 中配置对象:

student: 
  id: 1 
  name: Java 
  age: 18
  # 或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):
student: {id: 1,name: Java,age: 18} 

这个时候就不能⽤@Value 来读取配置中的对象了,此时要使⽤另⼀个注解 @ConfigurationProperties 来读取,具体实现如下:

@ConfigurationProperties(prefix = "student") 
@Component 
@Data
public class StudentComponent { 
   private int id; 
   private String name; 
   private int age; 
}


调⽤类的实现如下:

@Component 
public class ReadYml2 { 
   @Autowired 
   private StudentComponent studentComponent; 
   @PostConstruct 
   public void postConstruct() { 
       System.out.println(studentComponent); 
  } 
} 


14.yml配置集合

配置⽂件也可以配置 list 集合,如下所示:

dbtypes: 
name: 
  - mysql 
  - sqlserver 
  - db2
或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致): 
dbtypes: {name: [mysql,sqlserver,db2]} 


集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

@Component 
@ConfigurationProperties("dbtypes") 
@Data 
public class ListConfig { 
   private List<String> name; 
} 


调⽤类的实现如下:

@Component 
public class ReadYml2 { 
   @Autowired 
   private ListConfig listConfig; 
   @PostConstruct 
   public void postConstruct() { 
       System.out.println(listConfig.getName());
}
}


查看更多系统配置项:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties


properties & yml 总结

properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂

冒号加空格的⽅式设置,并且空格不可省略。

properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的

解决数据冗余的问题。

yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份

配置⽂件作为 Java 和 Go 的共同配置⽂件。

yml 虽然可以和 properties 共存,但⼀个项⽬中建议使⽤统⼀的配置类型⽂件。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
492 0
|
2天前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
22 10
|
1天前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
10天前
|
消息中间件 NoSQL 安全
(转)Spring Boot加载 不同位置的 application.properties配置文件顺序规则
这篇文章介绍了Spring Boot加载配置文件的顺序规则,包括不同位置的application.properties文件的加载优先级,以及如何通过命令行参数或环境变量来指定配置文件的名称和位置。
|
2月前
|
Java 测试技术 Spring
Java SpringBoot 加载 yml 配置文件中字典项
Java SpringBoot 加载 yml 配置文件中字典项
32 0
|
2月前
|
Java 数据格式
SpringBoot 读取 yml 配置的几种方式
SpringBoot 读取 yml 配置的几种方式
94 0
|
2月前
|
Java
SpringBoot yml 小格子 变 小叶子
SpringBoot yml 小格子 变 小叶子
24 0
|
3月前
|
Java
springBoot如何设置yml文件,设置端口号
springBoot如何设置yml文件,设置端口号
|
4月前
|
Java 数据库连接 开发者
SpringBoot实用开发篇第一章(yml配置文件操作)
SpringBoot实用开发篇第一章(yml配置文件操作)
下一篇
无影云桌面