首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java spring boot中有效地运行几个任务

如何在java spring boot中有效地运行几个任务
EN

Stack Overflow用户
提问于 2021-05-11 03:13:28
回答 3查看 59关注 0票数 0

我有一个案例,每隔5ms运行一些任务(15-20)。这将是简单的选择到数据库,解析数据并保存在我的数据库中。

我有一个spring boot应用程序java8。

我有一个问题,因为我不知道如何有效地完成它。

它应该全天候工作,而且永远不会停止。

我找到了像定时器这样的2-3个解决方案,但它应该每隔几毫秒运行一次,所以如果你有更好的想法,请让我知道。

EN

回答 3

Stack Overflow用户

发布于 2021-05-11 03:42:49

处理它的一个好方法是使用微服务架构。

像kafka一样发送消息队列中的任务,并在多台机器上部署spring应用程序。

应用程序将侦听队列并处理作业。

如果数据库是瓶颈,则应该是分片。

票数 0
EN

Stack Overflow用户

发布于 2021-05-11 04:36:49

通过@EnableScheduling启用您的应用程序调度,然后您可以根据cron表达式相应地调度您的任务。

代码语言:javascript
复制
@Scheduled(cron = "*/5 * * * * ?")
public void method() {
   // Your task
}

上面的cron表达式将确保此方法每隔5分钟执行一次。

票数 0
EN

Stack Overflow用户

发布于 2021-05-13 21:43:21

选项1

代码语言:javascript
复制
// prepare list of tasks
List<Runnable> tasks = new ArrayList<>();

tasks.add(() -> {
    System.out.println("I am task 1");
});
tasks.add(() -> {
    System.out.println("I am task 2");
});
// ... and so on

// Schedule each task to launch every 5 ms
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(tasks.size());

tasks.forEach(task -> {
    executorService.scheduleAtFixedRate(task, 0, 5, TimeUnit.MILLISECONDS);
});

选项2

代码语言:javascript
复制
@Scheduled(initialDelay = 0, fixedDelay = 5)
public void task1() {
   // do stuff
}

@Scheduled(initialDelay = 0, fixedDelay = 5)
public void task2() {
   // do stuff
}

// and so on 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67476398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档