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使用还是要注意场景,这里我乱用了。