需要在启动类里添加注解开启异步
@EnableAsync
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
//开启异步
@EnableAsync
@MapperScan(basePackages="com.example.demo.mapper")
@ComponentScan(basePackages= {"com.example.demo","org.n3r.idworker"})
//定时开关打开,需要类component注解被扫描到
@EnableScheduling
public class Demo1Application {
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
}
}
@Component 添加到spring容器里面
在执行的方法上面添加注解@Async ,即可开启异步。
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;
//开启被扫描
import io.netty.util.concurrent.Future;
@Component
public class AsyncTask {
@Async
public Future<Boolean> doTask1()throws Exception{
long start=System.currentTimeMillis();
Thread.sleep(1000);
long end=System.currentTimeMillis();
System.out.println("task1耗时"+(end-start)+"毫秒");
return (Future) new AsyncResult<Boolean>(true);
}
@Async
public Future<Boolean> doTask2()throws Exception{
long start=System.currentTimeMillis();
Thread.sleep(700);
long end=System.currentTimeMillis();
System.out.println("task2耗时"+(end-start)+"毫秒");
return (Future) new AsyncResult<Boolean>(true);
}
@Async
public Future<Boolean> doTask3()throws Exception{
long start=System.currentTimeMillis();
Thread.sleep(900);
long end=System.currentTimeMillis();
System.out.println("task3耗时"+(end-start)+"毫秒");
return (Future) new AsyncResult<Boolean>(true);
}
}