返回介绍

3.3 Spring Boot 的配置文件

发布于 2025-04-21 20:58:43 字数 2805 浏览 0 评论 0 收藏

Spring Boot 的自动配置方式让配置文件使用起来更加方便,直接配置默认属性就可以完成对其他模块的集成。

3.3.1 默认配置文件

Spring Boot 默认支持两种配置文件,即 bootstrap(.yml 或.properties 格式)文件和 application(.yml 或.properties 格式)文件。

从加载顺序来看,bootstrap 文件是优先于 application 文件的。bootstrap 文件是父应用程序上下文加载,用于程序启动的引导工作,并且 bootstrap 文件可以从额外的资源来加载配置信息。从应用场景来看,bootstrap 文件可以配置一些系统级别的属性,这些属性的特征基本不会变,而 application 文件可以通过环境的不同分成多个文件。这两个文件共用一个环境,为 Spring Boot 应用程序提供配置属性。

可以看到,Spring Boot 的配置文件有.yml 与.properties 两种扩展名称。YAML 格式的文件可以更方便地定义层次配置数据,数据结构层次清晰明了,配置简单易读。本节的示例将会采用 YAML 格式的文件来配置数据。

3.3.2 多环境配置

在进行应用开发时,环境会分为开发环境(dev)、测试环境(test)和线上环境(prod),对应的会有多个配置文件,如 application-dev.yml、application-test.yml 和 application-prod.yml。Spring Boot 采用 spring.profiles.active 属性变量来指定具体的配置文件,如 spring.profiles.active=test,应用启动加载的文件是 application-test.yml。

同样,也可以在一个 application.yml 文件中通过 spring.profiles 属性配置不同环境的属性值。示例代码如下:

server:
    address: 192.168.1.100
---
spring:
    profiles: dev
server:
    address: 127.0.0.1
---
spring:
    profiles: prod
server:
    address: 192.168.1.120

上面的这个例子中,如果 dev 配置被指定,则 server.address 的属性值为 127.0.0.1。同样,如果 prod 配置被指定,则 server.address 的属性值为 192.168.1.120。如果 dev 和 prod 配置都没有被指定,则 server.address 的属性值为 192.168.1.100。

3.3.3 配置注解

Spring Boot 提供了 @ConfigurationProperties 和 @Value 等注解,可以轻松地获取配置文件的属性值。具体示例代码如下:

my:
   servers:
       -dev.example.com
       -another.example.com
   name: zhangsan

上面是一个 YAML 格式的配置文件,可以通过 @ConfigurationProperties 注解获取配置的属性值。示例代码如下:

@Data
@Component
@ConfigurationProperties(prefix="my")
public class ConfigProperties {
    //值:dev.example.com 、another.example.com
    private List<String> servers = new ArrayList<String>();
    private String name;                                        //值:zhangsan
}

通过 @EnableConfigurationProperties 注解可以引入 ConfigProperties 类。示例代码如下:

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(ConfigProperties.class)
public class MyConfiguration {
}

通过 @Validated 注解可以对配置文件中的属性值进行校验。示例代码如下:

@ConfigurationProperties(prefix="my")
@Validated
public class ConfigProperties {
    private List<String> servers = new ArrayList<String>();
    @NotNull                                                            //不为空
    private String name;
}

通过 @Value("${property}") 注解方式可以直接获取单个属性值。示例代码如下:

@component
public class ConfigService {
    @Value("${my.nam}")  //zhangsan
    private String name;
}

Spring Boot 使用 @Configuration 注解完成自动配置,同时也提供了很多 @Conditional 注解,指定在哪些条件下才能自动加载配置,如果不满足条件,则不加载。@Conditional 注解的类型如表 3.2 所示。

表 3.2 @Conditional 注解的类型

057-1

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。