package com.example.batch.job;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobScope;
import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.repository.JobRepository;
import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
@Slf4j
@RequiredArgsConstructor
@Configuration
@ConditionalOnProperty(prefix = "spring.batch.job", name = "names", havingValue = "FlowStepJob")
public class FlowStepJobConfig {
private final JobRepository jobRepository;
private final PlatformTransactionManager transactionManager;
@Bean
public Job FlowStepJob() {
return new JobBuilder("flowStepJob", jobRepository)
.incrementer(new RunIdIncrementer())
.start(firstStep())
.on("FAILED") //firstStep의 ExitStatus가 Failed 일 경우
// .fail()//fail을 하면 오류가 떨어짐
.to(failedStep())
.on("*")//failedStep의 결과가 무엇이든 recordStep을 진행한다.
.to(recordStep())
.on("*")//recordStep의 결과가 무엇이든 끝낸다.
.end()
.from(firstStep())
.on("COMPLETED") //firstStep의 ExitStatus가 Completed 일 경우
.to(completedStep())
.on("*")
.to(recordStep())
.on("*")
.end()
.from(firstStep())
.on("*")//firstStep의 결과가 FAILED, COMPLETED를 제외한 다른 값일 경우
.to(otherStep())
.on("*")
.to(recordStep())
.on("*")
.end()
.end()
.build();
}
@Bean
@JobScope
public Step firstStep() {
return new StepBuilder("firstStep", jobRepository)
.allowStartIfComplete(true)
.tasklet((contribution, chunkContext) -> {
log.info("firstStep!");
// String result = "COMPLETED";
String result = "FAILED";
// String result = "UNKNOWN";
//Flow에서 on은 RepeatStatus가 아닌 ExitStatus를 바라본다.
switch (result) {
case "COMPLETED" ->
contribution.setExitStatus(ExitStatus.COMPLETED);
case "FAILED" ->
contribution.setExitStatus(ExitStatus.FAILED);
case "UNKNOWN" ->
contribution.setExitStatus(ExitStatus.UNKNOWN);
}
return RepeatStatus.FINISHED;
}, transactionManager)
.build();
}
@Bean
@JobScope
public Step failedStep() {
return new StepBuilder("failedStep", jobRepository)
.tasklet((contribution, chunkContext) -> {
log.info("failedStep!");
return RepeatStatus.FINISHED;
}, transactionManager)
.build();
}
@Bean
@JobScope
public Step completedStep() {
return new StepBuilder("completedStep", jobRepository)
.allowStartIfComplete(true)
.tasklet((contribution, chunkContext) -> {
log.info("completedStep!");
return RepeatStatus.FINISHED;
}, transactionManager)
.build();
}
@Bean
@JobScope
public Step otherStep() {
return new StepBuilder("otherStep", jobRepository)
.allowStartIfComplete(true)
.tasklet((contribution, chunkContext) -> {
log.info("otherStep!");
return RepeatStatus.FINISHED;
}, transactionManager)
.build();
}
@Bean
@JobScope
public Step recordStep() {
return new StepBuilder("recordStep", jobRepository)
.allowStartIfComplete(true)
.tasklet((contribution, chunkContext) -> {
log.info("recordStep!");
return RepeatStatus.FINISHED;
}, transactionManager)
.build();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
spring5.0master
共18个文件
java:9个
gradle:2个
properties:1个
需积分: 0 0 下载量 9 浏览量
2023-10-30
20:00:36
上传
评论
收藏 73KB ZIP 举报
温馨提示
非常不错
资源推荐
资源详情
资源评论
收起资源包目录
SpringBatch5.0-master.zip (18个子文件)
SpringBatch5.0-master
gradle
wrapper
gradle-wrapper.jar 62KB
gradle-wrapper.properties 252B
src
test
java
com
example
batch
BatchApplicationTests.java 208B
main
resources
application.yml 399B
java
com
example
batch
job
FlowStepJobConfig.java 5KB
SimpleTaskletSample.java 3KB
MultiStepJobConfig.java 3KB
SimpleChunkSample.java 3KB
dto
MemberDTO.java 637B
BatchApplication.java 308B
domain
Member.java 735B
repository
MemberRepository.java 285B
gradlew.bat 3KB
build.gradle 1008B
settings.gradle 27B
gradlew 8KB
compose.yaml 337B
.gitignore 444B
共 18 条
- 1
资源评论
zudlo
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功