当前位置: 首页 > 知识库问答 >
问题:

使用JDBC读取的SpringBatch应用程序无法启动

景河
2023-03-14

我有一些非常类似于下面的代码(我不得不做一些困惑)。我正在获取一个应用程序启动失败的错误。未显示的代码是datasource bean和spring boot application类。当我在debug中放置断点并运行所有bean时,所有bean似乎都被创建了,除了Job和Step bean,这两个bean似乎被完全跳过了。我不确定如何进一步诊断。似乎是一些Spring的魔法问题。任何想法都非常感谢。

下面是一个例外:

启动ApplicationContext时出错。若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2020-08-23 11:26:57.908错误12195---[主]O.S.B.D.LoggingFailureAnalysisReporter:

应用程序启动失败

说明:

进程结束,退出代码为%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();
    }
}

共有1个答案

澹台俊达
2023-03-14

您的限定Bean名称是itemreader,而不是databasecursoritemreader。或者更改方法名,或者更改为DatabaseCursorStep(@qualifier(“itemreader”)

@Bean
public Step databaseCursorStep(@Qualifier("itemReader") 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 ItemReader<StuffDto> itemReader(DataSource dataSource) {
    return new JdbcCursorItemReaderBuilder<StuffDto>()
        .name("cursorItemReader")
        .dataSource(dataSource)
        .sql(GET_DATA)
        .rowMapper(new BeanPropertyRowMapper<>(StuffDto.class))
        .build();
}
 类似资料:
  • 我已经在tomcat服务器上安装了应用程序。在启动和加载应用程序的过程中,我有以下堆栈跟踪的错误。如何解决这个问题? apache-tomcat-7.0.47/webapps/petclinic 2016年10月27日下午12:14:36 org。阿帕奇。卡塔琳娜。果心标准上下文起始内部 严重:ServletContainerInitializer处理javax时出错。servlet。Servle

  • 我无法读取项目中作为bean从另一个项目注入的类中的application.properties值。我的项目正在使用另一个项目,该项目的类需要从application.properties中读取配置。Mine是一个maven项目和一个Spring Boot应用程序,在src/main/resources文件夹中有application.properties,这些属性值在其中定义。我错过了什么,它无

  • 无法使用maven运行spring启动应用程序。当我运行命令mvn spring boot:run时,我收到:,但在pom中。我写的xml,其中是使用该示例的主要类: 我有这个项目结构: 我希望使用spring boot和maven运行我的应用程序。但现在它不起作用了。

  • 尝试通过Intellij IEDA运行Appium服务器时发生以下错误: 错误:无法启动应用程序会话,错误是:错误:命令失败:C:\WINDOWS\system32\cmd。exe/s/c“c:\Android\sdk\platform tools\adb.exe-s emulator-5554安装”c:\Program Files(x86)\Appium\node\u modules\Appiu

  • 我有一个cucumber测试: 这是一个测试,它不是在测试文件夹中定义的,而是一个seprate文件夹(作为源集,其他人创建了这个结构)。 源集(测试所在)的gradle配置如下: 看看gradle文件,有三件事, 有一个源集定义为 编译CLassPath, runTimeClassPath, srcDir已被定义为相同的 甚至resources.srcDir也在设置中(我有应用ymls) 我已经