当前位置 : 首页 » 文章分类 :  开发  »  SpringBoot-@Async异步调用

SpringBoot-@Async异步调用

Spring @Async 异步调用笔记

Spring提供了两种任务调度方法:
1、同步任务,@Scheduled,通过 @EnableScheduling 启用
2、异步任务,@Async,通过 @EnableAsync 启用


@EnableAsync启用异步方法

有时候我们会调用一些特殊的任务,任务会比较耗时,重要的是,我们不管他返回的后果。这时候我们就需要用这类的异步任务啦,调用后就让他去跑,不堵塞主线程,我们继续干别的。

在Spring Boot中,我们只需要通过使用@Async注解就能简单的将原来的同步方法变为异步方法。

@Async 标注的方法将在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。

为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync

@SpringBootApplication
@EnableAsync
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

@Async异步方法

public void AsyncTask(){
    @Async
    public void doSomeHeavyBackgroundTask(int sleepTime) {
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Async
    public Future<String> doSomeHeavyBackgroundTask() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return null;
    }

    public void printLog() {
        System.out.println("  i print a log  ,time=" + System.currentTimeMillis());
    }
 }

测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = AsycnTaskConfig.class) //要声明@EnableASync
public class AsyncTaskTest {
    @Autowired
    AsyncTask asyncTask;

    @Test
    public void AsyncTaskTest() throws InterruptedException {
        if (asyncTask != null) {
            asyncTask.doSomeHeavyBackgroundTask(4000);
            asyncTask.printLog();
            Thread.sleep(5000);
        }
    }
}

@Async所修饰的函数不要定义为static类型,这样异步调用不会生效

Spring Boot中使用@Async实现异步调用
http://blog.didispace.com/springbootasync/

Spring的两种任务调度Scheduled和Async
https://sanjay-f.github.io/2015/08/24/Spring%E7%9A%84%E4%B8%A4%E7%A7%8D%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6Scheduled%E5%92%8CAsync/


异步异常处理

Spring的两种任务调度Scheduled和Async
https://sanjay-f.github.io/2015/08/24/Spring%E7%9A%84%E4%B8%A4%E7%A7%8D%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6Scheduled%E5%92%8CAsync/

springboot异步调用@Async
https://segmentfault.com/a/1190000010142962


上一篇 Java-Bean Validation

下一篇 SpringBoot-@Scheduled定时任务

阅读
467
阅读预计2分钟
创建日期 2018-06-28
修改日期 2018-06-28
类别
百度推荐