【问题标题】:how to design a step for Spring batch that only do a read task如何为仅执行读取任务的 Spring 批处理设计一个步骤
【发布时间】:2015-05-20 16:13:03
【问题描述】:

我的批处理类似于 Step1 Step2 和 Step3(如果 step2 成功则应该调用)。

我需要使用 sql 进行计数检查,例如 select count(*) from table where condition = ?在步骤 2。 如果 count 为 0 则失败;

因为我只有一个读取块和一个进程检查而不是写入器。但春天不允许。我应该尝试使用 tasklet 吗? 但是 tasklet 不是 Reader ... 建议?

【问题讨论】:

  • 作为春季批次的新手,我发布了这个问题。它不再需要了。

标签: java spring spring-batch


【解决方案1】:

您可以使用虚拟物品编写器或推出您自己的无所事事编写器 http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/sample/support/DummyItemWriter.html

【讨论】:

    【解决方案2】:

    这里的最佳解决方案可以是 - 避免使用三个步骤 - 如 Step1 Step2 和 Step3。

    您只能使用两个步骤。第一步和第二步。

    在第 1 步中 - 添加一个侦听器 - 在其上步进侦听器。

    在其 StepListener - 实现中 - 您可以获取计数,然后您可以决定是否要开始第 2 步。

    在 afterStep 方法中 - 您可以使用如下代码来获取计数 --

        Connection conn = null;
        PreparedStatement pstmt= null;
    
        try {
    
    
        DataSource dataSource = (DataSource) Main.APP_CONTEXT
                .getBean("dataSource");
    
         conn = dataSource.getConnection();
         pstmt = conn.prepareStatement(" your SQL query to insert ");
     pstmtMstr.executeQuery();
    
    
    
    
        } catch (Exception e) {
    
        }finally{
    
            if(pstmt!=null){
                pstmt.close();
            }if(conn!=null){
                conn.close();
            }
    
    
        }
    

    在您的 Main 类中 - 在静态变量中加载您的应用程序上下文 - APP_CONTEXT 并在此处使用它。

    如果您不使用基于 XML 的方法,那么您可以使用 autowire 来获取数据源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2019-12-05
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多