Spring Boot配置文件(YAML & Properties)总结

文章目录

🎉欢迎来到架构设计专栏~Spring Boot配置文件(YAML & Properties)总结



Spring Boot是一种用于简化Spring应用程序开发的框架,它提供了强大的配置管理功能。Spring Boot支持多种配置文件格式,包括YAML和Properties。在本文中,我们将总结Spring Boot配置文件的用法、语法规则以及最佳实践。

配置文件的作用

Spring Boot的配置文件用于配置应用程序的各种属性,包括数据库连接、端口号、日志级别、第三方服务的密钥等。通过配置文件,我们可以灵活地管理应用程序的配置,而不需要修改源代码。

YAML配置文件

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,它以缩进方式表示数据层次结构。在Spring Boot中,YAML文件通常用于配置复杂的属性。

以下是一个简单的YAML配置文件示例:

yaml 复制代码
server:
  port: 8080
  servlet:
    context-path: /myapp

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password

在这个示例中,我们定义了服务器端口、Servlet上下文路径以及数据库连接属性。注意YAML文件的缩进表示层次结构,因此子属性(如portcontext-path)必须缩进两个空格以表示它们是父属性的子属性。

Properties配置文件

Properties文件是键值对的形式,它在Spring Boot中也被广泛使用。以下是上述YAML配置文件的等效Properties版本:

properties 复制代码
server.port=8080
server.servlet.context-path=/myapp

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=password

在Properties文件中,每一行都包含一个属性的键值对。键和值之间使用等号(=)分隔。

配置文件的加载顺序

Spring Boot配置文件可以存在于多个位置,它们会按照特定的顺序加载。以下是加载顺序:

  1. 当前目录下的/config文件夹。
  2. 当前目录。
  3. 类路径下的/config包。
  4. 类路径根目录。

这意味着如果存在多个配置文件,后加载的配置文件会覆盖前加载的配置,从而允许我们在不同环境中使用不同的配置文件。

激活不同的配置文件

Spring Boot使用spring.profiles.active属性来激活不同的配置文件。可以在application.propertiesapplication.yaml中设置该属性,也可以在命令行或环境变量中指定。

例如,在application.properties中设置激活的配置文件为dev

properties 复制代码
spring.profiles.active=dev

然后,创建一个名为application-dev.propertiesapplication-dev.yaml的配置文件,其中包含与dev环境相关的配置。

配置文件的占位符

Spring Boot允许在配置文件中使用占位符${...}来引用其他属性的值。这对于在不同配置文件之间共享属性值非常有用。

以下是一个使用占位符的示例:

properties 复制代码
server.port=8080
app.name=myapp-${server.port}

在这个示例中,app.name属性的值将被解析为myapp-8080

自定义配置属性

除了使用Spring Boot默认的配置属性外,我们还可以定义自己的配置属性。要定义自定义配置属性,可以创建一个Java类,并使用@ConfigurationProperties注解来指定属性的前缀。然后,将该类作为一个Bean注册到Spring容器中。

以下是一个自定义配置属性的示例:

java 复制代码
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {

    private String greeting;

    public String getGreeting() {
        return greeting;
    }

    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }
}

在上述示例中,我们定义了一个名为myapp.greeting的属性,并在MyAppProperties类中声明了一个相应的字段。现在,我们可以在配置文件中设置这个属性的值:

yaml 复制代码
myapp:
  greeting: Hello, World!

然后,可以在应用程序中注入MyAppProperties类来获取该属性的值。

加密敏感信息

在实际项目中,配置文件可能包含一些敏感信息,如数据库密码、API密钥等。为了保护这些敏感信息,Spring Boot提供了加密和解密属性值的功能。

可以使用jasypt-spring-boot-starter等第三方库来实现属性加密。以下是一个示例:

首先,添加依赖:

xml 复制代码
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

然后,在配置文件中使用加密的敏感属性:

yaml 复制代码
myapp:
  password: ENC(密文)

在上述示例中,ENC(...)表示属性值已被加密。Spring Boot会自动解密属性值并注入到应用程序中。

配置文件的最佳实践

以下是一些Spring Boot配置文件的最佳实践:

  1. 使用YAML格式配置文件来管理复杂的属性,使用Properties格式配置文件来管理简单的属性。
  2. 使用多个配置文件来支持不同的环境(如application-dev.yamlapplication-prod.yaml等)。
  3. 使用占位符来引用其他属性的值,以避免硬编码。
  4. 将敏感信息加密存储,并使用第三方库来实现属性加密。
  5. 使用自定义配置属性类来封装和管理相关属性。

结论

Spring Boot配置文件是管理应用程序配置的关键。通过合理地使用YAML和Properties格式的配置文件,我们可以轻松管理应用程序的各种属性,从而提高了应用程序的灵活性和可维护性。同时,Spring Boot还提供了丰富的功能来支持自定义配置属性和属性加密,以满足不同项目的需求。希望本文对您理解和使用Spring Boot配置文件有所帮助!


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏

📜您可能感兴趣的内容:

相关推荐
2202_75442154几秒前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
蓝染-惣右介3 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
小林想被监督学习4 分钟前
idea怎么打开两个窗口,运行两个项目
java·ide·intellij-idea
HoneyMoose6 分钟前
IDEA 2024.3 版本更新主要功能介绍
java·ide·intellij-idea
我只会发热7 分钟前
Java SE 与 Java EE:基础与进阶的探索之旅
java·开发语言·java-ee
是老余9 分钟前
本地可运行,jar包运行错误【解决实例】:通过IDEA的maven package打包多模块项目
java·maven·intellij-idea·jar
crazy_wsp9 分钟前
IDEA怎么定位java类所用maven依赖版本及引用位置
java·maven·intellij-idea
.Ayang11 分钟前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
bjzhang7517 分钟前
SpringBoot开发——Maven多模块工程最佳实践及详细示例
spring boot·maven·maven多模块工程
一直学习永不止步17 分钟前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表