如何在 Spring 批处理中定义 'java.lang.String' 类型的 bean?

How do I define a bean of type 'java.lang.String' in Spring Batch?

考虑在您的配置中定义一个 'java.lang.String' 类型的 bean。 是我使用以下 reader 方法得到的错误:

@Bean
    public JdbcCursorItemReader<Assessment> getReader(DataSource datasource, String query, String name) {
        return new JdbcCursorItemReaderBuilder<Assessment>()
                .dataSource(datasource)
                .sql(query)
                .name(name)
                .rowMapper(new AssessmentMapper())
                .build();
    }

步骤配置如下:

public Step step1(StepBuilderFactory factory,
                         DataSource dataSource,
                         ItemReader reader,
                         ExpireAssessmentWriter writer, //use custom writer
                         AssessmentItemProcessor processor,
                         PlatformTransactionManager platformTransactionManager){
        return stepBuilderFactory.get("step1")
                .transactionManager(platformTransactionManager)
                .<Assessment,Assessment>chunk(10)
                .reader(getReader(dataSource, READER_QUERY, "AssessmentReader"))
                .processor(processor)
                .writer(writer)
                .build();
    }

为什么在尝试将字符串传递给 getReader 时出现错误?

编辑: 错误来自 getReader 中的第二个参数。我只是想将查询作为字符串传递,但错误输出如下所示:

Description:

Parameter 0 of method getReader in com.batch.config.ExpirationUtilityConfig required a bean of type 'java.lang.String' that could not be found.


Action:

Consider defining a bean of type 'java.lang.String' in your configuration.

您需要删除 getReader() 上的 @Bean。由于您在步骤定义中调用 getReader,因此无需将 reader 声明为 Spring bean。

您还需要从步骤定义的参数列表中删除 ItemReader。