程序员的资源宝库

网站首页 > gitee 正文

Spring注解之@Value基于Apollo或者YAML文件为静态变量赋值

sanyeah 2024-03-29 17:44:09 gitee 7 ℃ 0 评论

摘要:Spring Boot微服务中,把在Apollo配置中心或者YAML文件里配置的属性赋值给静态变量。

综述

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

??需求背景:假设自己的项目已经使用了Apollo,需要修改配置,并且,想要为静态属性赋值。

??小编楼兰胡杨在《Spring注解之@Value注解读取配置文件属性》中,介绍了如何为非静态属性赋值,如何为List、Map和Array类型的变量赋值。接下来,本文以 ReadApolloConfig 代码为例,演示如何为静态属性赋值

为静态变量赋值

??基于注解@Value、@Component和@EnableApolloConfig注入配置,@Value注解可以实时更新配置。

@Component
@EnableApolloConfig
public class ReadApolloConfig {
    
    private static String userName;
    // setUserName不可由static修饰
    @Value("${self.user.name}")
    private void setUserName(String userName) {
        userName = userName;
    }
    
    public static String getUserName() {
        return userName;
    }
}

??其中,使用@Value为静态变量userName赋值。对于静态属性 userName,我们直接使用@Value注解是不生效的,但是可以将@Value("${self.user.name}")注解添加到非静态setter方法 setAddress(String userName)上面,使得在参数注入的时候,将 Apollo 配置中心或者yaml配置文件中配置的值传递给静态属性userName,然后通过静态方法getUserName()获取静态属性的值。

测试用例


@RestController
@RequestMapping("/test")
public class Test {
    
    @GetMapping("/test1")
    public String test1() {
        readVale();
        return "hello world!";
    }
    
    private static void readVale() {
          System.out.println(ReadApolloConfig.getUserName());
    }

}

结束语

??文章到这里就结束了,看完之后你有什么想法想要跟大家分享呢?评论区在等着你!

??人生犹如跑长跑,当中会有一段很困难的时期,如果放弃就输了整个比赛,但如果锲而不舍,就有赢的希望。对于大多数平凡如你我的人而言,没有什么捷径,谁能坚持到最后,谁就笑得更灿烂。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表