在Spring Boot中,要实现接口排队执行,不并发执行,可以使用@Scheduled
注解,并配置为单线程模式。但@Scheduled
主要用于定时任务,如果是要对接口请求进行排队处理,则需要使用不同的策略。
对于接口排队处理,可以使用@Async
注解结合ThreadPoolTaskExecutor
来实现。首先,你需要配置一个线程池,然后在你想要排队执行的方法上加上@Async
注解。
以下是一个简单的例子:
- 配置类,配置线程池:
java@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
@Bean
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(1); // 单线程
executor.setMaxPoolSize(1); // 单线程
executor.setQueueCapacity(100); // 队列大小
executor.initialize();
return executor;
}
}
- 在你的接口方法上使用
@Async
注解:
java@Service
public class YourService {
@Async
public void processTask(String task) {
// 这里是你的业务逻辑
}
}
- 调用排队执行的方法:
java@RestController
public class YourController {
@Autowired
private YourService yourService;
@PostMapping("/task")
public void submitTask(@RequestBody String task) {
yourService.processTask(task);
}
}
当你调用/task
接口时,processTask
方法会被排队执行,因为我们配置了单线程的线程池。新的任务会进入队列等待执行,不会与之前的任务并行执行。