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

如何从数据库中检索/设置ItemReader的SQL查询?

曹君墨
2023-03-14

我有一个Spring批处理程序,它从数据库中读取数据并处理它,并将(使用ItemWriter)插入到数据库中的其他表中。在这里,我使用了一系列针对ItemReader、Item处理机和ItemWriter的SQL查询。

我的要求是将所有这些查询存储在一个具有参数和值格式的表中,并通过一个数据库调用来检索它,然后将其传递给ItemReader或Item处理机或ItemrWriter。因此,如果将来查询有任何变化,我们将最终只进行数据库更新,代码将保持不变。

我试图在beforeJob部分中这样做,但我遇到了一个错误:“java.lang.IllegalArgumentException:必须提供SQL查询”。但我可以通过在ItemReader方法中进行DB调用来成功地实现这一点。我试图避免这种方法,因为我需要对每个ItemReader、ItemProcessor和ItemWriter进行db调用。请让我知道如何做到这一点?

共有2个答案

何烨华
2023-03-14

在我看来,这样的配置通常是将查询存储在属性中,而不是数据库中。比如:

batch.query.unload=SELECT ...
何涵忍
2023-03-14

您可以使用从数据库中读取查询并将其添加到执行上下文中的tasklet创建一个步骤,然后使用执行上下文中的查询配置面向块步骤的读取器。以下是一个快速示例:

@Bean
public Tasklet queryRetrievalTasklet() {
    return (contribution, chunkContext) -> {
        String query = ""; // retrieve query from db (using a JdbcTemplate for example)
        chunkContext.getStepContext().getJobExecutionContext().put("query", query);
        return RepeatStatus.FINISHED;
    };
}
@Bean
@StepScope
public ItemReader<Integer> itemReader(@Value("#{jobExecutionContext['query']}") String query) {
    // return your reader configured with the query
    return null;
}

希望这有帮助。

 类似资料:
  • 问题内容: 有没有办法列出所有SQL Server CE数据库表索引,或者至少列出单个表? 问题答案: -检索有关数据库中包含的索引的信息。选择*从INFORMATION_SCHEMA.INDEXES -检索数据库中的所有表,包括系统表。选择*从INFORMATION_SCHEMA.TABLES Arjuna Chiththananda-检索SQL CE数据库的架构信息

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 所以我根据YouTube上的教程创建了一个房间数据库。我有两个栏day and likes,每个栏都有int.目前,我已经用三行数据手动填充了数据库。 下面是手动填充数据库的代码: 在我的Dao类中,我当前有Insert、Update、deleteAll和getall...方法。这里是道: } 现在,我要从Room数据库中检索基于当天的数据。所以我想要第6天的likes数,它是1。我想检索数据并将

  • 我有一个内置在Django的系统可以接收数据。我将数据存储如下: 我们期望每个传感器的在每个后续消息中增加一个。如您所见,传感器B的message_id为:1、2、4、7。这意味着传感器B丢失了编号为3、5和6的消息。在这种情况下,我们需要调查丢失的消息,特别是如果丢失了很多消息。所以我现在想要一种方法,当它发生的时候,知道这些丢失的消息。 所以我想检查一下在过去的五分钟内是否缺少一条消息。我希望

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • firebase数据库最近的更新似乎有一些变化。我的项目在firebase\u数据库:^7.0.0版本下运行良好,但在firebase数据库的更新版本中,我无法更新项目代码。 以下是v7的工作版本 firebase\u数据库^9.0.12上的同一代码出现错误。我收到的错误在`(DataSnapShot snap)async{…}上错误是 无法将参数类型“Future Function(DataSn