Spring Boot 3(Kotlin):TestRestTemplate读取超时设置无效如何解决
解决Spring Boot 3集成测试中TestRestTemplate超时设置无效的问题
1. 确保测试配置类被正确加载
你的IntegrationTestConfiguration配置类需要被集成测试类导入,否则Spring会使用默认的TestRestTemplate实例(默认读取超时为10秒),而非你自定义的Bean。在测试类上添加@Import注解:
@ExtendWith(SpringExtension::class) @ActiveProfiles("test") @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @Import(IntegrationTestConfiguration::class) // 新增此注解 class IntegrationIT { // ... 原有代码 }
2. 调整TestRestTemplate的超时配置方式
Spring Boot 3中,直接通过RestTemplateBuilder.setReadTimeout()可能无法正确传递配置到底层请求工厂。建议直接配置SimpleClientHttpRequestFactory的超时参数:
@TestConfiguration class IntegrationTestConfiguration { @LocalServerPort private val port = 0 @Bean fun testRestTemplate(): TestRestTemplate { // 配置请求工厂的超时参数 val requestFactory = SimpleClientHttpRequestFactory().apply { readTimeout = 50 * 1000 // 读取超时50秒 connectTimeout = 5 * 1000 // 连接超时5秒(可选,按需调整) } val restTemplate = RestTemplateBuilder() .rootUri("http://localhost:$port") .requestFactory { requestFactory } // 绑定自定义请求工厂 .build() return TestRestTemplate(restTemplate) } }
3. 备选方案:直接修改底层RestTemplate参数
如果上述方式仍不生效,可以直接操作TestRestTemplate的底层RestTemplate实例,手动设置超时:
@TestConfiguration class IntegrationTestConfiguration { @LocalServerPort private val port = 0 @Bean fun testRestTemplate(): TestRestTemplate { val testRestTemplate = TestRestTemplate() val restTemplate = testRestTemplate.restTemplate // 强制转换为默认请求工厂并设置超时 val requestFactory = restTemplate.requestFactory as SimpleClientHttpRequestFactory requestFactory.readTimeout = 50 * 1000 requestFactory.connectTimeout = 5 * 1000 // 设置根URI restTemplate.rootUri = "http://localhost:$port" return testRestTemplate } }
内容的提问来源于stack exchange,提问作者Irina S.
相关产品推荐
相关产品推荐

