写点什么

Spring Boot 应用使用 application.yml 和 application.properties 的区别

作者:Jerry Wang
  • 2022-10-24
    四川
  • 本文字数:1003 字

    阅读完需:约 3 分钟

Spring Boot 应用使用 application.yml 和 application.properties 的区别

Spring 3.1 引入了新的 @PropertySource 注解作为向环境添加属性源的便捷机制。


我们可以将此注解与 @Configuration 注解结合使用:


@Configuration@PropertySource("classpath:foo.properties")public class PropertiesWithJavaConfig {    //...}
复制代码


注册新属性文件的另一种非常有用的方法是使用占位符,它允许我们在运行时动态选择正确的文件:


@PropertySource({   "classpath:persistence-${envTarget:mysql}.properties"})
复制代码


Spring Boot 中的一个常见做法是使用外部配置来定义我们的属性。 这允许我们在不同的环境中使用相同的应用程序代码。


我们可以使用属性文件、YAML 文件、环境变量和命令行参数。

Properties Configuration

默认情况下,Spring Boot 可以访问 application.properties 文件中设置的配置,该文件使用键值格式:


spring.datasource.url=jdbc:h2:devspring.datasource.username=SAspring.datasource.password=password
复制代码


这里每一行都是一个单独的配置,所以我们需要通过为我们的键使用相同的前缀来表达分层数据。 在这个例子中,每个键都属于 spring.datasource。


在我们的值中,我们可以使用带有 ${} 语法的占位符来引用其他键、系统属性或环境变量的内容:


app.name=MyAppapp.description=${app.name} is a Spring Boot application
复制代码

List Structure

如果我们有不同值的同一种属性,我们可以用数组索引来表示列表结构:


application.servers[0].ip=127.0.0.1application.servers[0].path=/path1application.servers[1].ip=127.0.0.2application.servers[1].path=/path2application.servers[2].ip=127.0.0.3application.servers[2].path=/path3
复制代码

YAML Configuration

除了 Java 属性文件,我们还可以在 Spring Boot 应用程序中使用基于 YAML 的配置文件。 YAML 是一种用于指定分层配置数据的便捷格式。


现在让我们从属性文件中获取相同的示例并将其转换为 YAML:


spring:    datasource:        password: password        url: jdbc:h2:dev        username: SA
复制代码


如果表达 list 结构,YAML 格式也更加简洁:


application:    servers:    -   ip: '127.0.0.1'        path: '/path1'    -   ip: '127.0.0.2'        path: '/path2'    -   ip: '127.0.0.3'        path: '/path3'
复制代码


SAP CAP 基于 SpringBoot 版本的 sample 应用,使用的就是 Application.yml 文件,比如 mock user 的定义:



和帮助文档里的 yml 语法稍稍有些不一样:



发布于: 刚刚阅读数: 3
用户头像

Jerry Wang

关注

🏆InfoQ写作平台-签约作者🏆 2017-12-03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。工作中使用 ABAP, Java, JavaScript 和 TypeScript 进行开发。

评论

发布
暂无评论
Spring Boot 应用使用 application.yml 和 application.properties 的区别_Java_Jerry Wang_InfoQ写作社区