美文网首页
@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