Springboot在静态方法中从nacos配置中心动态获取值

在动态获取这部分网上的大部分都是有些不符合我这个需求到,什么@Value()和@ConfigurationProperties获取,以及版本的冲突,都试过了,折磨了两三天,然后弄了这个方法,哪里不对的欢迎指出。配置部分不多说了直接上代码。

第一步是获取配置中心类的配置。

@Component
@RefreshScope
public class Config {
// 这里使用到的是ConfigurableApplicationContext 来获取配置中心到值。
    @Autowired
    private ConfigurableApplicationContext configurableApplicationContext;
	//这个变量最好和nacos里需要获取到一致。方便识别
    public String maxloglength;
	//get和set方法
    public void setMaxloglength(String maxloglength) {
        this.maxloglength = maxloglength;
    }
	//get方法处理一下
    public String getMaxloglength() {
    //这里的xx.xx是你配置中心要获取到值
    /*例如你的nacos需要获取的是这样到
    *monthTime:
    *  maxloglength: 9000
    * 那么这个地方就是monthTime.maxloglength
    */
        return maxloglength = configurableApplicationContext.getEnvironment().getProperty("xx.xx");
    }
}

第二部通用的静态方法使用非静态类到转换,网上一大堆我展示我的。

@Component
@RefreshScope
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;
    
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringContextUtil.applicationContext == null) {
            SpringContextUtil.applicationContext = applicationContext;
        }
    }
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String maxloglength) {

        return getApplicationContext().getBean(maxloglength);
    }

    public static <T> T getBean(Class<T> clazz) {
        T test=getApplicationContext().getBean(clazz);
        return test;
    }

    public static <T> T getBean(String maxloglength, Class<T> clazz) {
        return getApplicationContext().getBean(maxloglength, clazz);
    }
}

第三步是在静态方法中获取。我随意写一个类的方法,根据你们的需求改正

public class test{
	public static void testNaocs(){
		Config config= SpringContextUtil.getBean(Config.class);
		//这个len就是根据你nacos动态获取的值。完成
		String len=config.getMaxloglength();
	}
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在 Spring Boot 应用,可以通过 `@Value` 注解来动态配置值,但是该注解只能用于非静态的方法。如果需要在静态方法Nacos 配置中心的值,可以使用 `ApplicationContext` 来手动配置值。 具体实现步骤如下: 1. 在 `ApplicationContext` 取 `ConfigService` 对象,从而可以访问 Nacos 配置中心。 ```java ConfigService configService = applicationContext.getBean(ConfigService.class); ``` 2. 使用 `configService` 对象Nacos 配置中心的值。例如,取 `configKey` 对应的配置值: ```java String configValue = configService.getConfig(configKey, group, timeout); ``` 其,`configKey` 为配置项的名字,`group` 为配置项所在的分组,`timeout` 为配置的超时时间。 3. 将取到的配置值传入静态方法进行处理。 完整代码示例: ```java import com.alibaba.nacos.api.config.ConfigService; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @Component public class NacosConfigUtils { private static ApplicationContext applicationContext; public static void setApplicationContext(ApplicationContext context) { applicationContext = context; } public static String getNacosConfig(String configKey, String group, long timeout) { ConfigService configService = applicationContext.getBean(ConfigService.class); return configService.getConfig(configKey, group, timeout); } } ``` 在 `setApplicationContext` 方法,将 `ApplicationContext` 对象赋值给静态变量 `applicationContext`。之后,在静态方法调用 `getNacosConfig` 方法即可Nacos 配置中心配置值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值