呼叫controller方法,遇到操作時間很長的情況下,不希望前端一直等待操作,而希望前端立馬接收到操作啟動的反饋,而真正的操作在後端執行,需要用到非同步呼叫的方法。實現步驟如下:
一、配置非同步支援: 首先,在應用程式的主類上新增 @EnableAsync 註解,以啟用非同步支援
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; //@EnableAsync @SpringBootApplication @EnableAsync public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
二、在ExportService的方法exportCsv上增加註解 @Async宣告該方法是非同步方法
@Service public class ExportService { /** * 匯出路徑。 * * @param path 引數說明 * @return String */ //如下註解 支援非同步執行 @Async public String exportCsv(String path) { // 這裡是需要非同步執行的程式碼 } }
三、Controller類上呼叫非同步方法,立馬返回"匯出操作在後臺執行!請耐心等待!",匯出程序在後端非同步執行
@RestController @RequestMapping("/transfer") public class ImportController extends BaseController { @Autowired private ExportService exportService; /** * 聯機匯出的資料。 * * @param path 引數說明 * @return AjaxResult */ @PostMapping(value = "/exportCsv") @ResponseBody public AjaxResult ljExportCsv(@Valid String path) { exportService.exportCsv(path); return "匯出操作在後臺執行!請耐心等待!" ; } }