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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM