请给我一个DelayQueue整合在spring boot中的例子
时间: 2024-05-07 13:16:43 浏览: 67
springboot整合示例
好的,下面是一个整合了DelayQueue的Spring Boot例子:
首先,在pom.xml文件中引入相应的依赖:
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
然后创建一个名为MyTask的任务类,该任务类需要实现Runnable接口:
```
public class MyTask implements Runnable {
private String taskName;
private long delayTime;
public MyTask(String taskName, long delayTime) {
this.taskName = taskName;
this.delayTime = delayTime;
}
@Override
public void run() {
System.out.println("Task " + taskName + " executed at: " + new Date());
}
//Getter和Setter方法省略
}
```
接下来创建一个名为TaskManager的任务管理类,该类使用DelayQueue来管理任务:
```
@Component
public class TaskManager {
private static final int DEFAULT_INITIAL_CAPACITY = 16;
private DelayQueue<MyTask> taskQueue = new DelayQueue<MyTask>(DEFAULT_INITIAL_CAPACITY);
@PostConstruct
public void init() {
startTaskExecutor();
}
public void addTask(MyTask task) {
taskQueue.put(task);
}
private void startTaskExecutor() {
Executors.newSingleThreadExecutor().submit(() -> {
while (true) {
try {
MyTask task = taskQueue.take();
task.run();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
```
最后,在Controller中添加一个API用于添加任务:
```
@RestController
public class TaskController {
@Autowired
private TaskManager taskManager;
@GetMapping("/addTask")
public String addTask() {
long delayTime = 10_000;//10秒
MyTask task = new MyTask("Task at " + new Date(), delayTime);
taskManager.addTask(task);
return "Task added!";
}
}
```
现在,当你访问http://localhost:8080/addTask时,一个延迟10秒的任务将被添加到DelayQueue中,并在10秒后执行。
阅读全文