在@Async加上@Transactional是無法起到事物控制的,因爲其是基於異步處理操作
在@Async內部調用方法中使用@Transactional即可
如:@Async+@Transactional不生效 ,@Async方法調用 a、b方法,在a、b方法中加上@Transactional生效
使用@Async需要在啓動類上加@EnableAsync
可以使用Future<T>獲取結果
@Component
public class MyAsyncTask {
@Async
public Future<String> one() {
return new AsyncResult<>("執行結果");
}
}
@Autowired
private MyAsyncTask asyncTask;
@Test
void test() throws InterruptedException, ExecutionException {
Future<String> one = asyncTask.one();
while (!one.isDone()){
Thread.sleep(1000);
}
System.out.println(one.get());
}