So verwenden Sie die Startparameter für Spring-Batch-Jobs in einer Spring-Boot-Umgebung.
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()
}
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
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();
}
}