Spring Cloud Finchley.RC2版本使用分布式配置中心去git仓库读取不到配置文件解决方案

问题描述:

    笔者在使用Spring Cloud Config分布式配置中心从git仓库读取不到配置文件,查阅资料发现也是Finchley.RC2版本中HttpClientConfigurableHttpConnectionFactory这个类没有,解决方案会提到。


报错信息:

java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1967) ~[na:1.8.0_161]



访问报错:






解决方案:

<spring-cloud.version>Finchley.RC2</spring-cloud.version>改为<spring-cloud.version>Finchley.RC1</spring-cloud.version>

原因:
Finchley.RC2版本下java.lang.StringIndexOutOfBoundsException: String index out of range: -1报错应该是这个版本的一个BUG。 在此版本有个HttpClientConfigurableHttpConnectionFactory这个类(1.4.3没有),lookupHttpClientBuilder方法中,第69行报错, 分析了一下,在substring的时候,获取File.separator的值为反斜杠"\",这可能是个BUG? 那么之所以走到这里是因为第67行获取到的HttpClientBuilder对象为null,反推这个HttpClientBuilder是哪来的时,发现是在前面通过MultipleJGitEnvironmentProperties传入的, 好吧,再去找MultipleJGitEnvironmentProperties这个傻缺从哪来的,发现是在EnvironmentRepositoryConfiguration.DefaultRepositoryConfiguration内自动注入了一个Bean(205行),有传入MultipleJGitEnvironmentProperties对象; 调试发现,里面的uri为null,所以在将HttpClientBuilder对象放入httpClientsByUri中的时候(HttpClientConfigurableHttpConnectionFactory(line:59))没有put进去; 我在调试MultipleJGitEnvironmentProperties注册成Bean的时候,uri是的的确确有被赋值,到此我就不知所以了,就要多请教大家了。


更换spring Cloud版本后再次读取:






圈起来部分就是从git仓库检出到本地到配置文件





猜你喜欢

转载自blog.csdn.net/zjh_746140129/article/details/80698111