使用Spring Boot 1.5.2.RELEASE
和@Async
註釋似乎被忽略。Spring Boot - @Async被忽略
已經設置這樣的環境:
@SpringBootApplication
@EnableAsync
public class Application extends AsyncConfigurerSupport {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("async-task-");
executor.initialize();
return executor;
}
...
...異步方法本身:
@Service
public class MyService {
@Async
public Future<Long> asyncTask() throws Exception {
Long test = 1023L;
Thread.sleep(10000);
return new AsyncResult<>(test);
}
}
...現在我想要使用此:
@RestController
public MyController {
@Autowired
public MyService myService;
@PostMapping("/test")
public ResponseEntity<MyResponse> test() {
return new ResponseEntity<>(
new MyResponse(myService
.asyncTask()
.get()),
HttpStatus.OK);
}
}
...和控制器方法仍然掛起10sec
,而不是立即返回。
從不同的對象調用@Async
方法。它既不是私有的也不是交易型的,就像它在類似問題中提到的一樣。
如何讓該方法異步調用?
它*是*被異步調用。然後你的控制器明確阻止響應。 – chrylis
這個。當您調用get()時,您正在等待任務完成,以便您可以檢索結果。 –
我強烈建議您閱讀Spring MVC –