Spring批处理:用于Spring批处理元数据表的内存数据库
我使用SpringBatch从Oracle数据库读取数据,并将结果写入CSV文件 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库) 这是我的密码: BatchConfiguration.javaSpring批处理:用于Spring批处理元数据表的内存数据库,spring,spring-batch,datasource,Spring,Spring Batch,Datasource,我使用SpringBatch从Oracle数据库读取数据,并将结果写入CSV文件 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库) 这是我的密码: BatchConfiguration.java @Configuration @EnableBatchProcessing @EnableScheduling public class BatchConfiguration { @Autowired
@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) {
.....
}
批处理正在尝试使用my business数据库的元数据数据库:
原因:org.springframework.jdbc.badsqlgramarexception:正在执行查询;糟糕的SQL语法
我的代码中有问题吗
非常感谢我终于找到了解决办法 我的读者bean是:
@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
databaseReader.setDataSource(datasource);
....
}
@Bean
公共ItemReader阅读器(@Qualifier(“businessDataSource”)数据源数据源){
databaseReader.setDataSource(datasource);
....
}
我改变了它(现在它开始工作了)
@Bean
公共项目阅读器(){
JdbcCursorItemReader databaseReader=新的JdbcCursorItemReader();
setDataSource(primaryDataSource());
....
}
我终于找到了解决办法
我的读者bean是:
@Bean
public ItemReader<Person> reader(@Qualifier("businessDataSource") DataSource dataSource) {
databaseReader.setDataSource(datasource);
....
}
@Bean
公共ItemReader阅读器(@Qualifier(“businessDataSource”)数据源数据源){
databaseReader.setDataSource(datasource);
....
}
我改变了它(现在它开始工作了)
@Bean
公共项目阅读器(){
JdbcCursorItemReader databaseReader=新的JdbcCursorItemReader();
setDataSource(primaryDataSource());
....
}
为什么在secondary数据源上注释@Primary
?您好,因为AbstractBatchConfiguration需要一个bean,但找到了2个:org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration中的Field dataSource需要一个bean,但找到了2个:-primaryDataSource:由类路径资源[com/example/batchprocessing/BatchConfiguration.class]中的方法“primaryDataSource”定义,-secondaryDataSource:由类路径资源[com/example/batchprocessing/BatchConfiguration.class]中的方法“secondaryDataSource”定义为什么要在secondaryDataSource
上注释@Primary
?您好,因为AbstractBatchConfiguration需要一个bean,但找到了2个:org.springframework.batch.core.configuration.annotation.AbstractBatchConfiguration中的Field dataSource需要一个bean,但找到了2个:-primaryDataSource:由类路径资源[com/example/batchprocessing/BatchConfiguration.class]中的方法“primaryDataSource”定义,-secondaryDataSource:由类路径资源[com/example/batchprocessing/BatchConfiguration.class]中的方法“secondaryDataSource”定义
@Bean
public ItemReader<Person> reader() {
JdbcCursorItemReader<Person> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setDataSource(primaryDataSource());
....
}