在动态获取这部分网上的大部分都是有些不符合我这个需求到,什么@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();
}
}