前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SpringBoot系列】static修饰的字段如何获取application.yml配置

【SpringBoot系列】static修饰的字段如何获取application.yml配置

作者头像
林老师带你学编程
发布2019-05-25 23:49:25
2.3K0
发布2019-05-25 23:49:25
举报
文章被收录于专栏:强仔仔强仔仔

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1434164

今天给大家介绍一下SpringBoot的application.yml一种特殊的应用场景,一般我们获取application.yml的配置文件只要@Value就可以获取到值了,但是如果是static修饰的字段肯定就不能用这种方法了。比如下面这个例子,由static修饰的字段,上面加上@Value明显是获取不到值的。

那基于这种情况下我们该怎么办呢,有些童鞋会说,我们直接用非静态的不就行了。如果这个字段是在非静态的方法里面当然可以了,可是这个方法是在静态方法里面使用的,例如下面所示

这个时候该怎么办呢???别急我们可以这么来,我们可以在@Configuration配置类里面初始化这些值,那怎么初始化呢,不要着急,下面我们一步步来介绍。

首先我们在static修饰的字段添加set方法,然后再@Configuration配置类中进行初始化set值进去。下面是我们@Configuration配置类代码

代码语言:javascript
复制
/**
 * @author linzhiqiang
 * @date 2018-07-31
 * @deprecated 设置静态参数初始化
 */
@Configuration
public class StaticConfig {
    @Value("${push.app.key}")
    private String pushKey;

    @Value("${push.master.secret}")
    private String pushSecret;

    @Value("${cloud.tencent.private.type}")
    private String cloudType;

    @Value("${cloud.tencent.appid}")
    private String cloudAppId;

    @Value("${cloud.tencent.identifier}")
    private String cloudIdentifier;

    @Bean
    public int initStatic() {
        Push.setAppKey(pushKey);
        Push.setMasterSecret(pushSecret);
        CloudSignHelper.setSkdAppid(cloudAppId);
        CloudSignHelper.setTencentPrivateType(cloudType);
        TXCloudHelper.setAppid(cloudAppId);
        TXCloudHelper.setIdentifier(cloudIdentifier);
        return 0;
    }
}

这边说一下为什么initStatic要返回0,我之前是void类型的,可一启动直接就报错了。后面百度之后说 @Bean必须有返回值,所以我这边就返回一个0(没有什么特殊的含义)。

我们再看一下具体static初始化方法,例如

给静态变量加上setget方法,然后我们再静态方发中就可以通过get方法来获取这个值就可以了。

总结:

有些童鞋就会回到第一点那边了,为什么static修饰的字段就不能通过@Value设置值呢,这是因为@Value设置值是通过spring容器来ioc设置值的,可是static修饰的字段在构造函数之前就加载完了,所以是没办法通过@Value来设置值。但是我们却可以通过加set的方法,在@Configuration配置类启动的时候,给static修饰的字段设置新的值,通过这种方式就可以解决这种问题了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档