无法注册在类路径资源[com / example / config / JobConfig.class]中的bean'step1'

问题描述 投票:0回答:1

我希望在我的Spring Batch应用程序中使用JobExecutionDecider。我已参考:How to use decider in Spring batch?

对于我编写的代码,我遇到了以下错误。注意:当然,我不想覆盖代码中的bean。任何建议为什么会出现此错误?

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-01-01 19:32:30.859 ERROR 13800 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'step1', defined in class path resource [com/example/config/JobConfig.class], could not be registered. A bean with that name has already been defined in class path resource [com/example/JobConfiguration.class] and overriding is disabled.

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true 

JobConfig.java

@Slf4j
@Configuration
public class JobConfig {
    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    public Tasklet step1Tasklet() {
        return new Step1Tasklet();
    }

    @Bean
    public JobExecutionDecider decider() {
        return new MyJobExecutionDecider();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet(step1Tasklet())
                .build();
    }

    // Here I used inbuild Tasklet
    @Bean
    public Step step2() {
        return stepBuilderFactory.get("step2")
                .tasklet((contribution, chunkContext) -> {
                    log.debug("Step2Tasklet is executed...");
                    System.out.println("world");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }

    @Bean
    public Step step3() {
        return stepBuilderFactory.get("step3")
                .tasklet((contribution, chunkContext) -> {
                    log.debug("Step3Tasklet is executed...");
                    return RepeatStatus.FINISHED;
                })
                .build();
    }

    @Bean
    public Job job() {
        return jobBuilderFactory.get("myJob")
                .start(step1())
                .next(decider())
                    .on("YES").to(step2())
                    .from(decider()).on("NO").to(step3())
                    .end()
                .build();
    }
}

MyJobExecutionDecider.java

public class MyJobExecutionDecider implements JobExecutionDecider{

    @Override
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
        return new FlowExecutionStatus("YES");
    }
}

Step1Tasklet.java

@Slf4j
public class Step1Tasklet implements Tasklet{

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        log.debug("Step1Tasklet is executed...");
        chunkContext.getStepContext().getStepExecution().setExitStatus(new ExitStatus("YES")); // or NO
        return RepeatStatus.FINISHED;
    }
}

SpringBatchDeciderApplication.java

@SpringBootApplication
@EnableBatchProcessing
public class SpringBatchDeciderApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBatchDeciderApplication.class, args);
    }
}
spring spring-batch jobexecutiondecider
1个回答
0
投票

我已经尝试过您的例子。基本上,我复制了您的代码并运行(除了我在Tasklet中删除了一行)。一切正常。我已将代码推送到github的https://github.com/bigzidane/spring-batch-validate-reader

请拉扯并自己尝试。如果您遇到相同的问题,请发表评论。

如果决策者是,则它正在执行步骤1和步骤2

2020-01-01 12:03:32.415  INFO 7300 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : Starting SpringBatchDeciderApplication on WINDOWS-ESDA5FC with PID 7300 (C:\Users\dotha\IdeaProjects\spring-boot-batch\target\classes started by dotha in C:\Users\dotha\IdeaProjects\spring-boot-batch)
2020-01-01 12:03:32.419  INFO 7300 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : No active profile set, falling back to default profiles: default
2020-01-01 12:03:33.650  INFO 7300 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-01-01 12:03:33.910  INFO 7300 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-01-01 12:03:34.045  INFO 7300 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta data indicating: H2
2020-01-01 12:03:34.305  INFO 7300 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
2020-01-01 12:03:34.493  INFO 7300 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : Started SpringBatchDeciderApplication in 2.525 seconds (JVM running for 3.001)
2020-01-01 12:03:34.495  INFO 7300 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
2020-01-01 12:03:34.617  INFO 7300 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=myJob]] launched with the following parameters: [{run.id=1}]
2020-01-01 12:03:34.638  INFO 7300 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
2020-01-01 12:03:34.652  INFO 7300 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step2]
world
2020-01-01 12:03:34.660  INFO 7300 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=myJob]] completed with the following parameters: [{run.id=1}] and the following status: [COMPLETED]
2020-01-01 12:03:34.663  INFO 7300 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-01-01 12:03:34.664  INFO 7300 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

如果决策者为否,它正在执行步骤1和步骤3

2020-01-01 12:00:45.046  INFO 20384 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : Starting SpringBatchDeciderApplication on WINDOWS-ESDA5FC with PID 20384 (C:\Users\dotha\IdeaProjects\spring-boot-batch\target\classes started by dotha in C:\Users\dotha\IdeaProjects\spring-boot-batch)
2020-01-01 12:00:45.049  INFO 20384 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : No active profile set, falling back to default profiles: default
2020-01-01 12:00:46.176  INFO 20384 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-01-01 12:00:46.393  INFO 20384 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-01-01 12:00:46.499  INFO 20384 --- [           main] o.s.b.c.r.s.JobRepositoryFactoryBean     : No database type set, using meta data indicating: H2
2020-01-01 12:00:46.703  INFO 20384 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : No TaskExecutor has been set, defaulting to synchronous executor.
2020-01-01 12:00:46.862  INFO 20384 --- [           main] c.b.e.s.d.SpringBatchDeciderApplication  : Started SpringBatchDeciderApplication in 2.205 seconds (JVM running for 2.705)
2020-01-01 12:00:46.864  INFO 20384 --- [           main] o.s.b.a.b.JobLauncherCommandLineRunner   : Running default command line with: []
2020-01-01 12:00:46.954  INFO 20384 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=myJob]] launched with the following parameters: [{run.id=1}]
2020-01-01 12:00:46.982  INFO 20384 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
2020-01-01 12:00:47.006  INFO 20384 --- [           main] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step3]
2020-01-01 12:00:47.017  INFO 20384 --- [           main] o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=myJob]] completed with the following parameters: [{run.id=1}] and the following status: [COMPLETED]
2020-01-01 12:00:47.030  INFO 20384 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-01-01 12:00:47.033  INFO 20384 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
© www.soinside.com 2019 - 2024. All rights reserved.