异步批量插入/更新表。SpringMVC,Java8(或更高版本,Java12)

异步批量插入/更新表。SpringMVC,Java8(或更高版本,Java12),java,spring,asynchronous,batch-processing,java-12,Java,Spring,Asynchronous,Batch Processing,Java 12,我正在制定一项业务需求,涉及3个表: 我们有3个数据库表 产品(60列) 分类产品(60列):从表产品复制匹配的记录 类别 每当用户创建新类别时,我们必须从与该类别匹配的表产品中查询产品列表,匹配条件由表产品的筛选列列表定义,例如:颜色为黄色,重量小于10kg,等等 然后,我们将使用表PRODUCTS返回结果中的主键,并在表PRODUCTS中创建一个批插入 基本上,我们有3条SQL语句: No.1>查询表产品中的匹配记录(此查询由另一个API端点完成) 第2名>在表类别中创建新记录 No.3

我正在制定一项业务需求,涉及3个表: 我们有3个数据库表

  • 产品(60列)
  • 分类产品(60列):从表产品复制匹配的记录
  • 类别
每当用户创建新类别时,我们必须从与该类别匹配的表产品中查询产品列表,匹配条件由表产品的筛选列列表定义,例如:颜色为黄色,重量小于10kg,等等

然后,我们将使用表PRODUCTS返回结果中的主键,并在表PRODUCTS中创建一个批插入

基本上,我们有3条SQL语句:

No.1>查询表产品中的匹配记录(此查询由另一个API端点完成)

第2名>在表类别中创建新记录

No.3>将表产品中的记录创建到表产品中

问题是,查询匹配产品的API需要22秒才能响应25000条记录,而该API来自另一个项目。但我们(即:多个微服务API)共享同一个数据库

我们不能在这里使用事务(例如@Transactional),因为这会让最终用户等待太长时间

我们需要为最终用户提供一个平滑的前端行为,这样,我们就不想让他们等待。然后,我只能考虑使用后端非阻塞异步机制,后端API在创建类别后立即返回响应(即:此时,我们跳过上面的第2和第3条)

然后,对2号和3号使用异步(如果失败,请重试3次),然后

Query for matched  from table PRODUCTS, then

Create records which primary keys received from table PRODUCTS into table CATEGORIZED_PRODUCTS with 1 SQL statement.
我们使用的是SpringBoot、SpringJPA、Java12和MySQL。请为我提供一些在这种情况下使用非阻塞异步的指南

使用独立的批处理作业项目不是一个选项,因为目前,它超出了时间跨度(由于公司管理)和系统基础结构的范围。我们也不能在数据库中创建存储过程或函数

PS:在“更新”类别的情况下,我们必须删除表CATEGORIZED_PRODUCTS中的记录,然后,我们再次处理第2和第3项


如果“删除”一个类别,我们必须删除表CATEGORIZED\u PRODUCTS中的记录,然后,我们再次处理第2和第3项。

谢谢你,我可以通过结合异步和重试来实现。请把答案贴出来,这样我就可以做标记了。