Spring Boot的application.properties、application.json与application.yml之间的区别


在本文中,我们将看看广泛使用的用于 Spring 应用程序的配置文件之间的区别,包括 application.properties 、application.json 和 application.yml。

什么是application.properties ?
众所周知,Spring Boot 是建立在 Spring 之上的。该框架减少了编写样板代码的需要,而是使开发人员能够专注于业务逻辑,而不是管理依赖项和配置。 

每个 spring boot 应用程序都带有一个名为 application.properties 的文件。您可能想知道此文件的主要功能是什么。答案是它拥有与应用程序相关的属性。该文件提供了在各种环境中执行程序所需的许多配置,每个配置都将指定一组单独的属性。 

我们可以指定各种类型的属性,例如更改端口、数据库连接、Hibernate属性、与 Eureka 服务器的连接等。

端口号
spring.port= 8081

应用名称
spring.application.name=your_app_name
Hibernate
spring.jpa.hibernate.ddl-auto=update
连接MySQL数据库
spring.datasource.url = jdbc:mysql:

Read more: https://www.java67.com/2023/02/difference-between-application.htmlixzz83L97Gumv


什么是 YAML?
YAML 代表另一种标记语言。YAML是一种人类可读的语言。它的语法非常简单,就好像是用通俗易懂的英语写成的一样。它遵循用于定义数据的键值模式。 

它经常用于配置文件和传送或保存数据的程序中。YAML 的许多部分都源自著名的计算机语言,如 XML、HTML、C 等。说到缩进,它会让你想到 Python。
我们不能在其中使用大括号、方括号或任何其他结束标记,就像在 Python 中一样。

建议使用YAML而不是JSON编写配置文件,因为它更容易理解并且对用户更友好,但是,它们通常可以互换使用。 
YAML 的另一个合法好处是它使 GitHub 等源代码控制解决方案能够跟踪和执行更新审计。

人们普遍认为 application.properties 文件难以阅读和理解。因此,大多数时候开发人员更喜欢 application.yml 文件而不是 application.properties 文件。

鉴于 YAML 是JSON的超集,它是描述分层配置数据的特别有用的格式。做一些配置,形成一个application.properties文件,重新写入YAML文件中。

连接 MySQL 数据库

spring:
   datasource:
     url: jdbc:mysql: //${MYSQL_HOST:localhost}:3306/your_database_name

Spring Boot 中的 Application.json 文件是什么?
Spring Boot 使您能够将配置外部化,这意味着您可以在不同的环境中工作。您可以使用各种来源进行外部配置,例如 Java 属性文件、YAML 文件、环境变量、应用程序 json 和命令行参数。

如前所述,Spring Boot 允许开发人员以多种格式声明应用程序的配置。与 application.properties 或 application.yml 不同的是,application.json 文件中的属性是一种加载配置的方式。 

即使在 spring boot 中可以读取 json 配置。但是需要注意的是spring boot默认是不支持这种方式的。因此,必须付出额外的努力才能使其发挥作用。

很多时候,对环境变量和系统属性的限制阻止了某些属性名称的使用。Spring Boot 为您提供了将一组属性组合到一个 JSON 结构中的选项,以帮助实现这一点。 
每次您的 spring 应用程序启动时,来自 spring.application.json 的属性将被处理并添加到环境中。可以使用命令行系统指定 spring.application.json 属性作为环境变量,如下所示。使用命令行参数

$ java -jar myapp.jar --spring.application.json='{ "spring": { "datasource": { "url": "jdbc:mysql://${MYSQL_HOST:localhost}:3306/your_database_name", "username": "database_username", "password": "database_password", "driver-class-name": "com.mysql.jdbc.Driver" } } }'