RestTemplate 的 post/get 請求,造成 程序停頓 2小時

RestTemplate 的 post/get 請求,造成 程序停頓 2h

異常的現象:
執行到 上面代碼的 第5行後,不再往下繼續執行,會停頓 2h 甚至更久(時長與 restTemplate 是否有資源有關)。由於這是後端服務處理程序,不存在超時問題,所以會長時間 停頓,處在假死狀態。

如果是接受前端請求的接口,會造成大量請求超時無響應。

 

啓動類:

@SpringBootApplication(scanBasePackages = { "com.wqb.platform"})
@EnableSwagger2
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.wqb.platform"})
@ComponentScan(basePackages = {"com.wqb.platform"},
        excludeFilters = {  @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.other.common.*"),
                            @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.second.config.*")
})
@EnableAsync
@EnableRetry
public class PlatFormApplication {

    public static void main(String[] args) {
        SpringApplication.run(PlatFormApplication.class,args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

 

請求發起類:

1 RestTemplate restTemplate = new RestTemplate();
2 HttpHeaders requestHeaders = new HttpHeaders();
3 requestHeaders.setContentType(MediaType.APPLICATION_JSON);
4 HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
5 String jsonStr = restTemplate.postForObject(url, requestEntity, String.class);
6 system.out.print("請求結果:" + jsonStr);

 

處理方式是:

將 ‘請求發起類’的第1行 RestTemplate restTemplate = new RestTemplate();

實例的創建,交給 spring 來管理和維護, 使用 注入的方式:

    @Autowired
    private RestTemplate restTemplate;

請求發起類:調整爲

1 // RestTemplate restTemplate = new RestTemplate();
2 HttpHeaders requestHeaders = new HttpHeaders();
3 requestHeaders.setContentType(MediaType.APPLICATION_JSON);
4 HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, requestHeaders);
5 String jsonStr = restTemplate.postForObject(url, requestEntity, String.class);
6 system.out.print("請求結果:" + jsonStr);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章