Springboot async异步任务
小于 1 分钟SpringJavaSpring Boot
使用
添加注解 @EnableAsync
@SpringBootApplication
@EnableAsync
public class SpringBootAsyncApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAsyncApplication.class, args);
}
}
异步方法
@Component
public class AsynDemo {
@Async
public void test() throws InterruptedException {
Thread.sleep(5000);
System.out.println("异步任务");
}
@Async
public Future<String> test1() throws InterruptedException {
TimeUnit.SECONDS.sleep(5);
return new AsyncResult<>("return value");
}
}
测试:
@Component
public class AsynTest implements CommandLineRunner {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private AsynDemo asynDemo;
@Override
public void run(String... args) throws Exception {
AsynTest proxyAsyTest = applicationContext.getBean(AsynTest.class);
System.out.println("start");
asynDemo.test();
System.out.println("end");
Future future = asynDemo.test1();
System.out.println(future.get());
}
}
注意项
- @Async方法必须声明为public
- 在spring中,@Async注解方法在同本类对象调用无效,因为@Async通过aop实现,在同一类调用没有走AOP,如果需要在同一个类调用,可以通过获取代理对象调用实现。
3.Async所修饰的函数不要定义为static类型,这样异步调用不会生效