使用 Apollo 为静态变量赋值的方法

Posted CG国斌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Apollo 为静态变量赋值的方法相关的知识,希望对你有一定的参考价值。

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

但是,在使用 Apollo 的时候,我们可能会遇到这样的场景:

  • 在类中,想要为静态属性赋值

我们且不考虑什么时候会出现这样的需求,仅考虑如果有这样的需求,我们应该怎么处理?实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。

以下面的ApolloConfig代码为例,我们分别为非静态属性name和静态属性address赋值:

@Configuration
@EnableApolloConfig
public class ApolloConfig 

    @Value("$csdn.name:NONE")
    private String name;
    
    private static String address;
   
    @Value("$csdn.address:NONE")
    public void setAddress(String param) 
        address = param;
    
    
    public static String getAddress() 
        return address;
    

如上述代码所示,我们需要同时启用@Configuration@EnableApolloConfig注解让 Apollo 配置生效,但如果我们使用 Spring Boot 或者 Spring Cloud 项目的话,一般都会将这两个注解加到统一的配置类或者启动类上面,因此就不过多的介绍了。

其中,我们使用@Value("$csdn.name:NONE")为非静态属性name赋值,并添加了默认值NONE,即当我们没有在 Apollo 配置中心配置该属性值的时候,Apollo 会自动将NONE作为默认值,赋值给name属性。

而对于静态属性address,我们直接使用@Value注解是不生效的,但是我们可以将@Value("$csdn.address:NONE")注解添加到非静态方法setAddress(String param)上面,通过参数注入的时候,将 Apollo 配置的值传递给静态属性address,然后我们在通过静态方法getAddress(),获取静态属性address的值。

值得注意的是,上面例子中使用的方法名是自定义的,不一定非得和参数名一致,根据需要自定义即可。

以上是关于使用 Apollo 为静态变量赋值的方法的主要内容,如果未能解决你的问题,请参考以下文章

请问java里给成员变量赋值,那成员变量会在哪个内存空间里

@Value注解无法为static 变量赋值

c++中静态成员变量和静态成员函数(笔试经历)

静态变量赋值问题

java static学傻了,;类方法中给成员变量赋值必须先new个对象,普通方法却不用,为啥呢?

java 中静态成员变量有没默认的初始值