【发布时间】:2018-12-24 05:41:27
【问题描述】:
我有一份春季批处理作业。有一个步骤正在调用 reader 方法。
步骤
@Bean public Step myStep(FlatFileItemWriter<String> writer, Processor
processor, @Value("${com.tableName}") String myTableName) {
return stepBuilderFactory.get("step1")
.<MyBean, String> chunk(this.chuckSize)
.reader(reader(myTableName, this.myRowMapper))
.processor(processor)
.writer(writer)
.build();
}
读者 工作
@Bean
public <T> JdbcCursorItemReader<T> reader(@Value("${com.tableName}") String tableName, RowMapper<T> rowMapper) {
JdbcCursorItemReader<T> jdbcCursorItemReader = new JdbcCursorItemReader<>();
String query = "select * from " + tableName;
jdbcCursorItemReader.setDataSource(dataSource);
jdbcCursorItemReader.setSql(query);
jdbcCursorItemReader.setRowMapper(rowMapper);
return jdbcCursorItemReader;
}
我希望我的读者采用动态表名。所以我将阅读器更改为如下所述。
@Bean
public <T> JdbcCursorItemReader<T> reader(String tableName, RowMapper<T> rowMapper) {
JdbcCursorItemReader<T> jdbcCursorItemReader = new JdbcCursorItemReader<>();
String query = "select * from " + tableName;
jdbcCursorItemReader.setDataSource(dataSource);
jdbcCursorItemReader.setSql(query);
jdbcCursorItemReader.setRowMapper(rowMapper);
return jdbcCursorItemReader;
}
这会导致以下错误。
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of method reader in com.walgreens.oracleextractionbatch.OracleExtractionJobConfiguration 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.
在激烈的谷歌搜索之后,我尝试了很多解决方法。但我认为我缺少一些基本的东西。请帮忙。 TIA
【问题讨论】:
-
您是否尝试使用原型范围定义阅读器 bean?默认情况下,它是单例范围,并且由于没有有关 tableName 的信息,因此您会收到错误消息。您正在寻找不同表名的读取器 bean,即每个表名一个 bean。尝试使用@scope("prototype") 或@scope(BeanDefinition.SCOPE_PROTOTYPE) 对阅读器进行注释,看看是否有效。
-
@Akash,我认为这应该可以解决问题。我会尽力让你知道...
-
对你的情况有用吗?
标签: spring spring-batch spring-ioc