SpringBoot的ConfigurationProperties或Value注解无效问题及解决

 更新时间:2024年11月01日 15:09:40   作者:Cadreman Johnson  
在SpringBoot项目开发中,全局静态配置类读取application.yml或application.properties文件时,可能会遇到配置值始终为null的问题,这通常是因为在创建静态属性后,IDE自动生成的Get/Set方法包含了static关键字

SpringBoot的ConfigurationProperties或Value注解无效

记录一个问题

在一般的SpringBoot项目开发中,我们一般会创建一些全局的静态配置类,用来读取application.yml/application.properties配置文件的内容。

普遍的做法是利用@Component和@ConfigurationProperties(prefix = “XXX”)这两个注解来帮我们实现。

# 项目相关配置
cadre:
  # 名称
  name: cadreuc
package com.cadre.common.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 全局配置类
 *
 * @author cadre
 */
@Component
@ConfigurationProperties(prefix = "cadreman")
public class Global
{
    /** 项目名称 */
    private static String name;

    public static String getName()
    {
        return name;
    }

    public static void setName(String name)
    {
        Global.name = name;
    }
}

原理非常简单,利用Spring将属性注入到静态类,然后通过静态类的特性使我们可以在项目全局取到它的值。

但是,当我们照猫画虎的创建了一个静态类后,却发现我们取的值始终为null。

难道是Component注解失效了吗?并不是,我们创建一个同名的Bean后提示命名重复。

难道是ConfigurationProperties注解失效了吗?带着疑问,我们继续研究。

发现问题所在

作为一名资深的CV程序员,已经多年没有手打过Get/Set方法了。

然而问题就在这里。当我们创建了一个静态属性时,IDE帮我们生成的Get/Set方法都默认加上了static。

	/** 项目名称 */
    private static String name;

	public static String getName()
    {
        return name;
    }

    public static void setName(String name)
    {
        Global.name = name;
    }
    

而Spring在注入这些属性时,反射的Set方法不会对static方法起作用。

所以导致了我们的set方法没有被调用。

解决方法

去掉Set方法的static

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot关于自动注入mapper为空的坑及解决

    SpringBoot关于自动注入mapper为空的坑及解决

    这篇文章主要介绍了SpringBoot关于自动注入mapper为空的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring中的事务操作、注解及XML配置详解

    Spring中的事务操作、注解及XML配置详解

    这篇文章主要给大家介绍了关于Spring中事务操作、注解及XML配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Java算法比赛常用方法实例总结

    Java算法比赛常用方法实例总结

    这篇文章主要给大家介绍了关于Java算法比赛常用方法实例总结的相关资料,文中给出了详细的实例介绍的非常详细,对大家学习java算法具有一定的参考学习价值,需要的朋友可以参考下
    2023-05-05
  • java生成XML的方法【附demo源码下载】

    java生成XML的方法【附demo源码下载】

    这篇文章主要介绍了java生成XML的方法,涉及java针对xml格式文件的简单操作技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2016-12-12
  • Java中的ArrayList.trimToSize()方法详解

    Java中的ArrayList.trimToSize()方法详解

    这篇文章主要介绍了Java中的ArrayList.trimToSize()方法详解,前几天看了Java ArrayList,没有明白trimToSize()这个方法是什么意思,所以看了一下源码并且debug一下自己的一个例子,明白了其中的含义,需要的朋友可以参考下
    2023-11-11
  • Java SPI与Spring Boot SPI的区别实战指南

    Java SPI与Spring Boot SPI的区别实战指南

    本文详细解析了JavaSPI和SpringBootSPI的区别,并通过实战示例展示了如何在SpringBoot项目中使用SpringBootSPI实现可扩展的支付服务,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-12-12
  • Java流程控制语句有哪些举例详解

    Java流程控制语句有哪些举例详解

    这篇文章主要介绍了Java流程控制语句有哪些的相关资料,包括顺序执行、分支控制(if/else、switch)及循环控制(for/while/do-while),需要的朋友可以参考下
    2025-06-06
  • SpringMVC修改返回值类型后的消息转换器处理方式

    SpringMVC修改返回值类型后的消息转换器处理方式

    这篇文章主要介绍了SpringMVC修改返回值类型后的消息转换器处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java开发微信Navicat支付完整版

    Java开发微信Navicat支付完整版

    这篇文章主要介绍了Java开发微信Navicat支付完整版,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Spring Boot 整合 Druid 并开启监控的操作方法

    Spring Boot 整合 Druid 并开启监控的操作方法

    本文介绍了如何在SpringBoot项目中引入和配置Druid数据库连接池,并开启其监控功能,通过添加依赖、配置数据源、开启监控、自定义配置以及访问监控页面,开发者可以有效提高数据库访问效率并监控连接池状态,感兴趣的朋友跟随小编一起看看吧
    2025-01-01

最新评论