springboot 配置文件不加载问题(利用OkHttpClient 升级restTemplate解决不支持PATCH方法)
·
问题
- restTemplate 不支持PATCH 方法
- 我的配置类为重新设置 restTemplate 的超时 以及 利用 OkHttpClient 作为请求,但是一直不加载
@Configuration
public class RestTemplateConfig {
// 连接超时时间,单位毫秒
private static final int CONNECT_TIMEOUT = 10000;
// 读取超时时间,单位毫秒
private static final int READ_TIMEOUT = 200000;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder
// 设置连接超时
.setConnectTimeout(Duration.ofMillis(CONNECT_TIMEOUT))
// 设置读取超时
.setReadTimeout(Duration.ofMillis(READ_TIMEOUT))
.requestFactory(() -> new OkHttp3ClientHttpRequestFactory(new OkHttpClient.Builder().build()))
.build();
}
}
1. 检查配置是否正确
确保项目中所有与 RestTemplate 相关的配置正确且唯一。检查 application.yml 或 application.properties 文件,确认是否存在重复的配置或冲突的依赖项。
没问题
2. 验证启动类位置
确认启动类位于正确的包路径下,且未被其他子类或配置类覆盖。启动类通常应位于根包或其子包中,确保组件扫描能正确覆盖所有配置类。
没问题
3. 日志调试同名配置或 Bean
在 application.yml 中启用调试日志,检查是否存在同名 Bean 或配置冲突。添加以下配置以打印 Bean 加载信息:
logging:
level:
org.springframework.beans.factory: debug
日志会显示类似以下信息,帮助定位重复的 Bean 定义:
Overriding bean definition for bean 'restTemplate' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=restTemplateConfig; factoryMethodName=restTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/joivin/model/config/RestTemplateConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=null; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=com.pig4cloud.pig.common.core.config.RestTemplateConfiguration; factoryMethodName=restTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/pig4cloud/pig/common/core/config/RestTemplateConfiguration.class]]
从日志中可以发现,当前加载的restTemplate 来自于 factoryBeanName=com.pig4cloud.pig.common.core.config.RestTemplateConfiguration,
好的既然找到了,那么干掉他就行了
- 我们可以找到引入他的具体依赖,选择从pom中移除他
- 简单粗暴,我们直接排查他自己
排除冲突配置
如果发现多个模块定义了相同的 Bean(如 RestTemplate),可以通过 spring.autoconfigure.exclude 排除冲突的配置类。例如:
spring:
autoconfigure:
exclude: com.pig4cloud.pig.common.core.config.RestTemplateConfiguration
再次断点,看下效果

至此可以看到已经成功加载到这个配置了
更多推荐




所有评论(0)