背景:
公司要求把配置文件存放到配置中心,通过配置中心统一修改配置文件,为方便管理,所有配置文件都整合到了Application.yml 配置中,其中redis 相关配置也整合到了Application.yml 文件中,发现以前通过读取配置文件绝对路径的方法不能适用读取配置中心的Application.yml 文件,所以需要调整读取实现方法。
整合前文件
整合后:
那么如何读取Application.yml ,
第一步:现通过注解读取配置文件:
@Component
Public class CacheConfValue{
@Value("${jedis.maxTotal}")
Public Strin gmaxTotal;
@Value("${jedis.maxIdle}")
Public String maxIdle;
@Value("${jedis.minIdle}")
Public String minIdle;
@Value("${jedis.maxWaitMillis}")
Public String maxWaitMillis;
@Value("${jedis.key}")
Public String key;
@Value("${jedis.nodes}")
Public String nodes;
public String getMaxTotal(){
return maxTotal;
}
public void setMaxTotal(StringmaxTotal){
this.maxTotal=maxTotal;
}
public String getMaxIdle(){
return maxIdle;
}
public void setMaxIdle(StringmaxIdle){
this.maxIdle=maxIdle;
}
public String getMinIdle(){
return minIdle;
}
public void setMinIdle(StringminIdle){
this.minIdle=minIdle;
}
public String getMaxWaitMillis(){
return maxWaitMillis;
}
public void setMaxWaitMillis(StringmaxWaitMillis){
this.maxWaitMillis=maxWaitMillis;
}
public String getKey(){
return key;
}
public void setKey(Stringkey){
this.key=key;
}
public String getNodes(){
return nodes;
}
public void setNodes(Stringnodes){
this.nodes=nodes;
}
}
因为实现redis 连接的方法在static 方法语句块中,发现直接通过@Autowired 调用bean,会抛出空指针异常,
原因是:Java变量的初始化顺序为:静态变量或静态语句块–>实例变量或初始化语句块–>构造方法–>@Autowired,
然后修改读取文件到全局静态变量,在读取全局变量,发现执行成功。
Private static final CacheConfValue cacheConfValue =(CacheConfValue)LocalContextFactory.getInstance().getBean("cacheConfValue");
public static final StringmaxTotal=cacheConfValue.getMaxTotal();
public static final StringmaxIdle=cacheConfValue.getMaxIdle();
public static final StringminIdle=cacheConfValue.getMinIdle();
public static final StringmaxWaitMillis=cacheConfValue.getMaxWaitMillis();
public static final StringcacheKey=cacheConfValue.getKey();
public static final Stringnodes=cacheConfValue.getNodes();