使用JDBC进行读取的SpringBatch App无法启动

问题描述

我有一些与下面的代码非常相似的东西(我不得不做一些混淆)。我收到应用程序启动失败错误。未显示的代码是数据源bean和spring boot应用程序类。当我放置断点并全部在调试中运行时,除了Job和Step Bean(似乎已被完全跳过)之外,所有Bean似乎都已创建。我不确定如何进一步诊断。似乎是一些Spring Magic问题。任何想法都将不胜感激。

这里是个例外:

2020-08-23 11:26:50.264信息12195 --- [main] o.apache.catalina.core.StandardService:启动服务[Tomcat] 2020-08-23 11:26:50.265信息12195 --- [main] org.apache.catalina.core.StandardEngine:启动Servlet引擎:[Apache Tomcat / 9.0.31] 2020-08-23 11:26:50.382信息12195 --- [main] o.a.c.c.C. [Tomcat]。[localhost]。[/]:初始化Spring嵌入式WebApplicationContext 2020-08-23 11:26:50.383信息12195 --- [main] o.s.web.context.ContextLoader:根WebApplicationContext:初始化在2276毫秒内完成 2020-08-23 11:26:57.552 WARN 12195 --- [main] ConfigServletWebServerApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称定义为'databaseCursorStep'的bean时出错类路径资源[/com/configuration/BatchConfig.class]:通过方法'databaseCursorStep'参数0表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为'org.springframework.batch.item.ItemReader '的合格bean:期望至少有1个有资格作为自动装配候选的bean。依赖项注释:{@ org.springframework.beans.factory.annotation.Qualifier(value = databaseCursorItemReader)} 2020-08-23 11:26:57.572信息12195 --- [main] o.apache.catalina.core.StandardService:正在停止服务[Tomcat] 2020-08-23 11:26:57.603信息12195 --- [[main] ConditionEvaluationReportLoggingListener:

启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行您的应用程序。 2020-08-23 11:26:57.908错误12195 --- [main] o.s.b.d.LoggingFailureAnalysisReporter:


申请无法开始


说明:

com.configuration.BatchConfig中的databaseCursorStep方法的参数0需要一个类型为'org.springframework.batch.item.ItemReader'的bean。

注入点具有以下注释: -@ org.springframework.beans.factory.annotation.Qualifier(value = databaseCursorItemReader)

动作:

考虑在您的配置中定义类型为“ org.springframework.batch.item.ItemReader”的bean。

与目标VM断开连接,地址:“ 127.0.0.1:46088”,传输:“套接字”

以退出代码1完成的过程

代码如下:

@Configuration
@EnableBatchProcessing
public class BatchConfig {

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;


private static final String GET_DATA =
    "SELECT " +
            "stuffA," +
            "stuffB," +
            "FROM STUFF_TABLE " +
            "ORDER BY stuffA ASC";

@Bean
public ItemReader<StuffDto> itemReader(DataSource dataSource) {
    return new JdbcCursorItemReaderBuilder<StuffDto>()
        .name("cursorItemReader")
        .dataSource(dataSource)
        .sql(GET_DATA)
        .rowMapper(new BeanPropertyRowMapper<>(StuffDto.class))
        .build();
}

@Bean
    ItemProcessor<StuffDto,StuffDto> databaseXmlItemProcessor() {
        return new QueryLoggingProcessor();
    }

@Bean
    public ItemWriter<StuffDto> databaseCursorItemWriter() {
        return new LoggingItemWriter();
    }

@Bean
    public Step databaseCursorStep(@Qualifier("databaseCursorItemReader") ItemReader<StuffDto> reader,@Qualifier("databaseCursorItemWriter") ItemWriter<StuffDto> writer,StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get("databaseCursorStep")
            .<StuffDto,StuffDto>chunk(1)
            .reader(reader)
            .writer(writer)
            .build();
}

@Bean
    public Job databaseCursorJob(@Qualifier("databaseCursorStep") Step exampleJobStep,JobBuilderFactory jobBuilderFactory) {
        return jobBuilderFactory.get("databaseCursorJob")
                .incrementer(new RunIdIncrementer())
                .flow(exampleJobStep)
                .end()
                .build();
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)