SpringBoot读取自定义配置文件的方式有哪些?
1 个回答
在自己的世界独善其身在别人的世界顺其自然。田灵儿# Spring Boot 读取自定义配置文件的方式 ## 作用 Spring Boot 除了默认读取 `application.yml` / `application.properties` 外,也可以读取自定义配置文件或自定义配置项,常见方式包括 `@Value`、`@ConfigurationProperties`、`Environment` 和 `@PropertySource`。 ## 配置加载位置 Spring Boot 默认配置加载优先级从高到低大致为: 1. 命令行参数,例如:`--server.port=8081` 2. `classpath:/config/` 下的 `application.properties` / `application.yml` 3. `classpath:/` 下的 `application.properties` / `application.yml` 4. 外部配置中心,例如 Nacos、Spring Cloud Config ## 常见读取方式 ### 1. 使用 `@Value` 适合读取单个简单配置项,也可以通过 `:` 指定默认值。 ```yaml app: name: order-v version: v1 ``` ```java @Component public class AppProperties { @Value("${app.name:order}") private String name; @Value("${app.version:v1.0.0}") private String version; } ``` 特点: - 优点:简单直接,适合注入单个变量。 - 缺点:不支持批量绑定和复杂嵌套结构,配置较多时不利于维护。 ### 2. 使用 `@ConfigurationProperties` 适合将一组配置批量绑定到配置类,是更推荐的方式。 ```java @Component @ConfigurationProperties(prefix = "app") @Data public class AppProperties { private String name; private List<String> servers; private Map<String, String> metadata; private Map<String, Module> modules; @Data public static class Module { private boolean enabled; private String path; } } ``` 特点: - 支持对象、嵌套对象、`List`、`Map` 等复杂结构。 - 支持强类型绑定。 - 可配合 `@Validated` 做配置校验。 - IDE 支持较好。 - 缺点是需要额外定义配置类。 ### 3. 使用 `Environment` 编程式读取 适合在运行时动态读取配置,或根据配置做条件判断。 ```java @RestController @RequiredArgsConstructor public class TestController { private final Environment env; @RequestMapping("/printEnv") public void printEnv() { String name = env.getProperty("app.name"); System.out.println("app.name = " + name); } } ``` 特点: - 优点:灵活,适合动态读取和第三方工具类场景。 - 缺点:配置散落在代码中,可读性较差,也不支持自动绑定。 ### 4. 使用 `@PropertySource` 加载自定义配置文件 当配置不放在默认的 `application.yml` / `application.properties`,而是放在单独文件中时,可以使用 `@PropertySource` 指定配置文件。 自定义文件 `sms-config.properties`: ```properties sms.sign=aliyun sms.template.code=TPL001 ``` 配置类: ```java @Configuration @PropertySource("classpath:sms-config.properties") @ConfigurationProperties(prefix = "sms") @Data public class SmsConfig { private String sign; private Template template; @Data public static class Template { private String code; } } ``` 适用场景: - 需要读取非默认名称的 `.properties` 配置文件。 - 可与 `@ConfigurationProperties` 配合,将自定义文件中的配置绑定到 Java 对象。发布于 2026-10-28 01:37 •IP属地 重庆举报评论收藏
公众号进入网站体验更佳

