springboot2 Scheduled Aysnc
时间: 2023-07-06 20:39:08 浏览: 88
在Spring Boot 2中,我们可以使用@Scheduled注解和@Async注解来实现异步定时任务。下面是一个示例:
```java
@Component
public class ScheduledTask {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Async
@Scheduled(fixedDelay = 1000)
public void scheduledMethod() throws InterruptedException {
System.out.println("Scheduled async task: " + dateFormat.format(new Date()));
Thread.sleep(5000); // 模拟任务执行时间
}
}
```
在上面的示例中,我们定义了一个名为ScheduledTask的@Component类,并在scheduledMethod方法上添加了@Scheduled和@Async注解。@Scheduled注解用于指定定时任务的执行方式,这里我们使用了fixedDelay=1000,表示每隔1秒执行一次任务。@Async注解用于将该方法标记为异步执行,这样任务会在另一个线程中执行,不会阻塞主线程。在方法中,我们输出了当前时间,并使用Thread.sleep(5000)模拟任务执行时间。
需要注意的是,@Async注解需要在Spring Boot中进行配置,以便正确地创建异步任务的执行器。您可以使用以下配置:
```java
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(200);
executor.setThreadNamePrefix("AsyncExecutor-");
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
```
在上面的示例中,我们定义了一个名为AsyncConfig的@Configuration类,并实现了AsyncConfigurer接口。在getAsyncExecutor方法中,我们创建了一个ThreadPoolTaskExecutor对象,并设置了核心池大小、最大池大小、队列容量和线程名称前缀等属性。在getAsyncUncaughtExceptionHandler方法中,我们返回了一个SimpleAsyncUncaughtExceptionHandler对象,用于处理异步任务执行过程中发生的异常。
阅读全文