Spring Boot 外部配置(配置中心化)详解 Spring Boot 框架提供了多种方式来进行外部配置,其中配置中心化是其中一种重要的方式。本文将详细介绍 Spring Boot 外部配置(配置中心化)的实现方式和原理。 配置中心化的概念 配置中心化是指将配置信息集中存储在一个地方,使得配置信息的管理和维护变得更加方便和高效。这种方式可以使得配置信息的更新和更改变得更加容易,减少了配置信息的冗余和错误。 Spring Boot 配置中心化的实现 在 Spring Boot 中,可以使用 properties 文件和 YAML 文件作为外部配置文件。properties 文件是一种常见的配置文件格式,Spring Boot 允许使用 properties 文件作为外部配置。YAML 文件是一种更加灵活和简洁的配置文件格式,但是当前编译器对于 YAML 语言的支持还不够好,因此目前还是使用 properties 文件作为外部配置。 基于 ZooKeeper 的配置中心 在 Spring Cloud Config 出现之前,自己实现了基于 ZooKeeper 的配置中心。该实现方式杜绝了本地 properties 配置文件,原理很简单,只是重载了 PropertyPlaceholderConfigurer 的 mergeProperties() 方法。该方法首先加载父类的配置,然后并入 ZooKeeper 中读取的配置。这种实现方式在 Spring 项目中使用起来还是挺顺手的。 Spring Boot 配置中心化的原理 Spring Boot 的配置中心化是通过 PropertySourceOrder 来实现的。PropertySourceOrder 是一个接口,用于定义配置信息的优先级。Spring Boot 的配置中心化是通过将配置信息从多个来源合并起来,包括: * Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active) * @TestPropertySource annotations on your tests * @SpringBootTest#properties annotation attribute on your tests * Command line arguments * Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property) * ServletConfig init parameters * ServletContext init parameters * JNDI attributes from java:comp/env * Java System properties (System.getProperties()) * OS environment variables * A RandomValuePropertySource that only has properties in random.* * Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants) * Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants) * Application properties outside of your packaged jar (application.properties and YAML variants) @ConfigurationProperties 的使用 @ConfigurationProperties 是 Spring Boot 中的一种注解,用于将配置信息注入到 Bean 中。该注解可以用于读取配置信息,例如使用 @ConfigurationProperties(prefix = "xxx") 可以读取以 "xxx" 为前缀的配置信息。这种方式可以使得配置信息的读取变得更加方便和简洁。 @ConfigurationProperties 的限制 然而,在 Spring Boot 项目中发现这种 placeholder 的实现跟 Spring Boot 的 @ConfigurationProperties(prefix = "xxx") 不能很好地配合工作,也就是属性没有被 resolve 处理。用 @Value 的方式确可以读到,但是 @Value 配置起来如果属性多的话还是挺繁琐的。因此,还是倾向用 @ConfigurationProperties 的 prefix。 结论 Spring Boot 的外部配置(配置中心化)可以使得配置信息的管理和维护变得更加方便和高效。通过使用 properties 文件和 YAML 文件作为外部配置文件,可以使得配置信息的更新和更改变得更加容易。同时,使用 @ConfigurationProperties 注解可以使得配置信息的读取变得更加方便和简洁。
- 粉丝: 3
- 资源: 907
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助