springboot中設置API代碼的超時時間


因為web服務本身的持久性,大多數時候超時設置應該在請求方設置;
當前一個springboot框架的web項目有一個需求,需要給api設置最大響應時間,超過這個時間,服務自動返回默認值給請求方。
現在有如下操作:
一、主線啟動類加異步支持注解
package com.zving;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableAsync public class WebApplication {

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

}

二、主要的邏輯代碼獨立出來,放入另一個文件中,接口api異步調用該邏輯代碼

package com.zving.util;

import java.util.concurrent.Future;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

@Component
public class ApiUtil {

    @Async public Future<String> submitFun() throws InterruptedException {
        //業務邏輯具體代碼
        Thread.sleep(4000);
        return new AsyncResult<String>("后端業務邏輯已經處理完成");    
    }
}

三、接口的線程有時間比較,超過時間則返回一個默認值

package com.zving.controller;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

import javax.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.zving.util.ApiUtil;

@RestController
public class ApiController {

    @Resource
    private ApiUtil util;

    @GetMapping(value = "/submit")
    public String submit() throws InterruptedException, ExecutionException {
        long oldTime = System.currentTimeMillis();
        Future<String> result = util.submitFun();
        while(true) {
            long newTime = System.currentTimeMillis();
            if(result.isDone()) {
                return result.get();
            }
            if(newTime-oldTime>3000) {
                return "后端業務邏輯正在處理,請耐心等待";
            }
        }
    }
}


免責聲明!

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



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