SpringBoot中@Value注解读取yml功能开关配置值与预期不符问题求助
可能遗漏的配置/问题排查点
- 配置文件加载优先级冲突
Spring Boot会按优先级从高到低加载配置,优先级从高到低为:启动命令参数 > 系统环境变量 > jar包外的配置文件 > jar包内的application-{环境}.yml > jar包内的application.yml。如果高优先级的配置源中配置了feature.toggles.checksLoginAndRegistration: false,就会覆盖你写在yml里的true值,优先排查当前运行环境对应的配置文件是否有覆盖。 - yml配置格式错误
yml对缩进要求严格,必须使用统一的空格缩进(不能使用Tab缩进),需确认feature、toggles、checksLoginAndRegistration的层级缩进正确,否则该属性会被识别为无效配置,@Value读取不到对应值时会给boolean类型变量赋默认值false。 - 业务类未被Spring容器托管
如果你的业务类没有加@Service/@Component/@RestController等Spring托管注解,对象是你手动new出来的,那么@Value注解不会被Spring处理,成员变量会使用基础类型的默认值false。 - 配置文件未被正确加载
确认你的yml文件名称为application.yml,且放置在项目的src/main/resources根目录下,如果是多模块项目,要确认配置文件所在模块被启动模块正确依赖,且打包时配置文件没有被maven/gradle的过滤规则排除。 - 可通过加默认值的方式快速验证:将@Value注解修改为
@Value("${feature.toggles.checksLoginAndRegistration:true}"),如果此时变量取值变为true,说明Spring确实没有读取到你写的配置项,优先排查上述配置加载、格式相关的问题。
内容的提问来源于stack exchange,提问作者user9347049
相关产品推荐
相关产品推荐

