zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-04-18 14:11:47 时间

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的值。

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