跳至主要內容

Springboot async异步任务

xw小于 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());
    }

}

注意项

  1. @Async方法必须声明为public
  2. 在spring中,@Async注解方法在同本类对象调用无效,因为@Async通过aop实现,在同一类调用没有走AOP,如果需要在同一个类调用,可以通过获取代理对象调用实现。
    3.Async所修饰的函数不要定义为static类型,这样异步调用不会生效