我正在使用spring batch从Oracle数据库读取数据并将结果写入CSV文件。
我还需要从oracle数据库中分离spring批处理元数据表,为此,我在我的批处理配置中配置了两个不同的数据源(一个用于spring批处理元数据的内存数据库)。
这是我的代码:
BatchConfiguration.java
@Configuration
@EnableBatchProcessing
@EnableScheduling
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean
@Qualifier("businessDataSource")
@ConfigurationProperties(prefix = "spring.business.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
@Qualifier("metadataDataSource")
@ConfigurationProperties(prefix = "spring.metadata.datasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
然后我的itemReader bean看起来像:
@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
.....
}
运行批处理时,一切正常。
但是当我尝试在我的 BatchApplication.java 中添加JobLauncher和Job Bean时:
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
该批次正在尝试将元数据数据库用于我的业务数据库:
原因:org.springframework.jdbc.BadSqlGrammarException:执行查询;错误的SQL语法
我的代码中有问题吗?
非常感谢
答案 0 :(得分:0)
最后我得到了解决方案
我的阅读器bean是:
@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
databaseReader.setDataSource(datasource);
....
}
我通过(现在可以了)更改它
@Bean
public ItemReader<Person> reader() {
JdbcCursorItemReader<Person> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setDataSource(primaryDataSource());
....
}