美文网首页
@ConfigurationProperties与静态加载配置文

@ConfigurationProperties与静态加载配置文

作者: 嘲讽男孩 | 来源:发表于2018-05-04 15:52 被阅读0次

应用场景

springboot日常开发中,会遇到静态方法需要加载配置文件信息这样的需求,
我们一般就会使用@Value注解和@ConfigurationProperties注解来加载配置的信息;

思路理清

<p>
1.@Value(需要配合@Component),该注解的执行在java运行初始化的最后的,所以不符合使用条件,感兴趣的 同学看看java初始化等博客.
2.@ConfigurationProperties,该注解初始化的时机是,凡是引用到该类的就会触发该注解,所以他符合我们的使用要求.
例如使用@ConfigurationProperties,贴下错误的代码,

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    private String host;

    private String port;
    
    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }
}

但是该类文件无法在static方法中使用,所以我们又会想到使用如下办法,全部使用静态变量,静态方法,贴下错误的代码

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
    private static String host;
    
    private static String port;
    
    public static String getHost() {
        return host;
    }
    
    public static void setHost(String host) {
        RedisProperties.host = host;
    }
    
    public static String getPort() {
        return port;
    }
    
    public static void setPort(String port) {
        RedisProperties.port = port;
    }
}

貌似没有问题了,但是项目运行后发现,host、port都是 null;
这是因为@ConfigurationProperties只会调用 非静态的set方法,所以我们稍微做一下改动,set方法都换成非静态的就可以了,贴下正确的代码:

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {

    private static String host;

    private static int port;

    public static String getHost() {
        return host;
    }

    public void setHost(String host) {
        RedisProperties.host = host;
    }

    public static int getPort() {
        return port;
    }

    public void setPort(int port) {
        RedisProperties.port = port;
    }
}

如此一来,就完成了我们想要的功能,感谢各位小伙伴!

相关文章

网友评论

      本文标题:@ConfigurationProperties与静态加载配置文

      本文链接:https://www.haomeiwen.com/subject/xswdrftx.html