springboot使controller非同步呼叫

万笑佛發表於2024-05-21

  呼叫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 "匯出操作在後臺執行!請耐心等待!" ;
    }
}

相關文章