当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux/Reactor使用@Scheduled读取数据库并执行某些任务

莘昊
2023-03-14

我是spring webflux的新手,我当前的Spring Boot应用程序使用调度程序(注释为@scheduled)从DB读取数据列表,批量并发调用rest api,然后写入事件流,我想在spring webflux中实现同样的操作。

  1. 我应该使用@schedule,还是从WebFlux使用scheduleperiotially?
  2. 如何将DB中的项目批处理成更小的集合(例如10个项目),并并发调用rest API?
  3. 目前,该应用程序在一次调度程序运行中最多获取100条记录,然后对其进行处理。我计划转移到r2dbc,如果我这样做了,我可以限制数据流像100吗?

谢谢

共有1个答案

宋志学
2023-03-14

1.我应该使用@schedule,还是从WebFlux中使用scheduleperiotially?

@schedule是spring framework调度包的一部分的注释,而SchedulePeriotialy是reactor的一部分的函数,所以您不能真正比较两者。我认为使用注释没有任何问题,因为它是核心框架的一部分。

2.我如何将DB中的项目批处理成更小的集合(比如10个项目),并并发调用rest API?

通过使用flux#buffer函数,该函数将在缓冲区满时发出项列表。

Flux.just("1", "2", "3", "4")
        .buffer(2)
        .doOnNext(list -> {
            System.out.println(list.size());
        }).subscribe()

每次将打印2个。

3.目前应用程序在一次调度程序运行中最多获取100条记录,然后对其进行处理。我正在计划转移到r2dbc,如果我这样做了,我可以限制像100的数据流吗?

 类似资料:
  • 项目Reactor3.1.5。发布 考虑这一点: 我希望订阅服务器在多个线程中运行,但它只在一个线程中运行: 留档告诉我的期望是正确的(http://projectreactor.io/docs/core/release/reference/#threading)。有人能给我解释一下那里发生了什么吗?

  • 问题内容: 我这里有一个简单的测试方法,该方法设置为每5秒运行一次,但确实可以,但是查看System.out可以看到它似乎在做一些奇怪的事情。 输出: 为什么每次都运行TWICE (出现)? 问题答案: 该注释位于此链接的第25.5.1节下,内容如下: 确保不要在运行时初始化同一@Scheduled注释类的多个实例,除非你确实希望为每个此类实例计划回调。与此相关,请确保不要在使用@Schedule

  • 数据库有执行和提取功能,当我试图返回列值后插入或更新使用执行,它只返回第一个值,如何得到所有的值不使用提取... 这是我的查询 INSERT INTO表(col1, col2, col3, col4)VALUES(val1, val2, val3, val4)返回col1, col2;

  • 我刚开始在我的项目中使用ArduinoJson库。我的目标是使用BT将三个传感器值从arduino nano发送到RasPi,使用json格式。此外,通过从BT接收“0”或“1”来控制继电器。 我成功地能够发送数据。但是,当我包括以下一段代码:(读取串行数据)if(Serial.available 并且我发送'1';我的数据传输受到干扰并且json字符串受到影响.当我发送'0'时,它恢复正常。 我

  • 我试图在springboot上同时运行多个计划任务,但实际上它们运行队列(一个接一个,不是并行的) 这是我简单的服务: 输出: 但是,它应该是这样的: 我做错了什么? 这是我的配置:

  • 问题内容: 我有一个应用程序,我想从excel读取数据,将其插入数据库,然后为特定用户生成pdf报告。我进行了很多搜索,但没有具体说明这两种情况。 问题答案: 使用PHPExcel库读取Excel文件并将数据传输到数据库中 一切都变得非常取决于您的数据库以及如何在其中构造数据