restTemplate添加拦截器无法启动问题

无法启动问题

因为在服务间需要传递token信息,之前都是显示传参,我感觉这样很麻烦且重复不美观。于是为restTemplate添加拦截器统一设置。拦截器内容如下:
图片名称
配置如下:
图片名称

结果启动时就报错了:
图片名称
因为restTemplate bean导致启动失败了,从异常信息中可以看出(MetricsInterceptorConfiguration.java:100)这个地方add操作报错了。点进去如下:
图片名称
可以看出是为restTemplate添加MetricsClientHttpRequestInterceptor拦截器时报错了。
回头一看原来是自己添加拦截器设置有问题即:

// new 了个singletonList进去,而这个singletonList是不支持添加等操作的所以就报错了。
restTemplate.setInterceptors(Collections.singletonList(new ConnStrInterceptor()));

restTemplate内部是有一个成员变量interceptors的,只用往里面加就行了。正确设置如下:
图片名称

MetricsClientHttpRequestInterceptor提示

这个拦截器是为系统添加一些请求监控信息的,如果url类型非常多的话有可能会导致内存溢出。具体可以看下面这篇文章:spring-cloud-netflix-core引发的一次内存溢出分析


结语:singletonList使用还是要注意场景,这里我乱用了。