[JAVA] Startparameter für Spring Batch-Jobs

So verwenden Sie die Startparameter für Spring-Batch-Jobs in einer Spring-Boot-Umgebung.

Quellcode etc.

build.gradle

build.gradle


plugins {
  id 'org.springframework.boot' version '2.2.6.RELEASE'
  id 'io.spring.dependency-management' version '1.0.9.RELEASE'
  id 'java'
}

configurations {
  developmentOnly
  runtimeClasspath {
    extendsFrom developmentOnly
  }
  compileOnly {
    extendsFrom annotationProcessor
  }
}


repositories {
  mavenCentral()
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-batch'

  compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.projectlombok:lombok'
  testImplementation('org.springframework.boot:spring-boot-starter-test') {
    exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
  }
  testImplementation 'org.springframework.batch:spring-batch-test'
  implementation 'com.h2database:h2'
}

test {
  useJUnitPlatform()
}

Festlegen von Jobstartparametern

Bei Verwendung mit Spring-Boot wird es, wenn es wie unten gezeigt als Befehlszeilenargument angegeben wird, als Jobstartparameter von Spring-Batch behandelt.

java -jar springbatchsample.jar hoge.param001=hoge

Wie zu empfangen

So erhalten Sie Jobstartparameter in Java. Es gibt verschiedene Variationen davon. Die Reader-Implementierung ist angemessen, überspringen Sie sie also.

SpEL - jobParameters['hoge.param001'] Verwendung von SpEL und `@ Value```. Wenn Sie @ Value (" # {jobParameters ['hoge.param001']} ") wie unten gezeigt ausführen, erhalten Sie in der obigen Befehlszeile `` hoge.param001 = hoge```.

import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.NonTransientResourceException;
import org.springframework.batch.item.ParseException;
import org.springframework.batch.item.UnexpectedInputException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
@StepScope
public class MyReader implements ItemReader<Integer> {

  @Value("#{jobParameters['hoge.param001']}")
  String param001;

  @Override
  public Integer read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
    System.out.println(param001);
    
    return null;
  }

}

Als Vorsichtsmaßnahme für diese Methode muss "@ StepScope" hinzugefügt werden. Unter https://terasoluna-batch.github.io/guideline/5.0.0. ..

beforeStep Verwendung des Listeners `@ BeforeStep``` und Abrufen des Jobstartparameters aus dem Methodenargument` stepExecution```.

@Component
public class MyReader2 implements ItemReader<Integer>  {
  
  @BeforeStep
  void beforeStep(StepExecution stepExecution) {
    String param001 = stepExecution.getJobParameters().getString("hoge.param001");
    System.out.println("##" + param001);
  }

  @Override
  public Integer read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
    return null;
  }

}

Als Variation des oben Gesagten gibt es auch eine Möglichkeit, den traditionellen "StepExecutionListener" anstelle von Anmerkungen zu implementieren.

public class MyReader3 implements ItemReader<Integer>, StepExecutionListener  {

  @Override
  public void beforeStep(StepExecution stepExecution) {
    String param001 = stepExecution.getJobParameters().getString("hoge.param001");
    System.out.println("###" + param001);
  }
  
  @Override
  public Integer read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
    return null;
  }

  @Override
  public ExitStatus afterStep(StepExecution stepExecution) {
    return stepExecution.getExitStatus();
  }

}

Recommended Posts

Startparameter für Spring Batch-Jobs
[Tutorial] Spring Batch
Ich habe Spring Batch ausprobiert
Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Schleifenschritt mit Spring Batch
Dinge, die beim Ausführen eines bestimmten Jobs mit Spring Batch zu beachten sind