现场问题-spring boot定时任务一段时间后停止

定时任务代码示例

@Slf4j
@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class ReactorScheduleTask{

    @Scheduled(fixedRate=1000)
    public void reactorColumnExperiment() throws Exception {
    	//long startTime = System.currentTimeMillis();
    	//log.info("----------------------run time :" + (System.currentTimeMillis() - startTime) + "ms");
    }

问题:在测试环境中,发现执行一段时间后,定时任务不执行了。

原因分析:请求某些接口响应不稳定,client端的请求线程一直等待不会释放,如果任务的线程池中的线程,就会一直占用线程池资源,导致线程池不能响应后续的的任务。

解决方案:设置client超时时间,超时不响应直接抛出,等待下一次执行

这里是HttpClient 4.3版本

/**
     * get请求
     *
     * @return
     */
    public static CallbackResult doGet(String url, Map<String, String> headers) {
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(url);
            httpGet.setHeader("Accept", "application/json");
            httpGet.setHeader("Content-Type", "application/json");
            //设置超时时间
            RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300).setConnectTimeout(300).build();
            httpGet.setConfig(requestConfig);

            CloseableHttpResponse response = httpClient.execute(httpGet);
            return new CallbackResult().alert(response.getStatusLine().getStatusCode(), EntityUtils.toString(response.getEntity()));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != httpClient) {
                    httpClient.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值