问题背景
在 Spring Boot 1.5 及更高版本中,@ConfigurationProperties 注解里的 location 属性被移除了。这主要是为了鼓励开发者采用更灵活的配置管理方式,避免将配置类与特定文件强绑定。
解决方案
如果你之前习惯通过 @EnableConfigurationProperties 激活配置类并指定 location,现在需要调整策略。核心思路是将配置类注册为 Spring 容器中的一个普通 Bean,然后手动指定配置文件位置。
具体步骤如下:
- 移除
@EnableConfigurationProperties:不要在启动类上显式激活这个配置类。 - 使用
@Component注册:给配置类加上@Component注解,让它能被自动扫描到。 - 指定资源路径:利用
@PropertySource注解指向你的自定义.properties文件。
下面是一个标准的配置类写法示例:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@PropertySource("classpath:my-config.properties")
@ConfigurationProperties(prefix = "my.config")
public class MyConfig {
// 定义属性字段
}
注意,这里我们保留了 @ConfigurationProperties 用于属性绑定,但不再依赖它来加载文件,而是交给 @PropertySource 处理。这样既满足了需求,也符合新版 Spring Boot 的设计哲学。
总结
这种组合方式虽然多写了一行注解,但解耦了配置类与文件路径的关系,维护起来更灵活。遇到类似迁移问题时,不妨换个角度思考,往往能找到更稳健的架构方案。


