Spring 批处理:在内存数据库中用于 spring 批处理元数据表
Spring Batch : use in memory database for spring batch metadata tables
我正在使用 spring 批处理从 Oracle 数据库读取数据并将结果写入 CSV 文件。
我还需要将 spring 批处理元数据表与 oracle 数据库分开,为此,我在批处理配置中配置了两个不同的数据源(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) {
.....
}
当我 运行 我的 Batch 时,一切正常。
但是当我尝试在我的 BatchApplication.java 中添加 JobLauncher 和 Job bean 时,如下所示:
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
该批次正在尝试将元数据库用于我的业务数据库:
Caused by: org.springframework.jdbc.BadSqlGrammarException: Executing query; bad SQL grammar
我的代码有问题吗?
非常感谢
终于有解决方案了
我的 reader 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());
....
}
我正在使用 spring 批处理从 Oracle 数据库读取数据并将结果写入 CSV 文件。
我还需要将 spring 批处理元数据表与 oracle 数据库分开,为此,我在批处理配置中配置了两个不同的数据源(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) {
.....
}
当我 运行 我的 Batch 时,一切正常。
但是当我尝试在我的 BatchApplication.java 中添加 JobLauncher 和 Job bean 时,如下所示:
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
该批次正在尝试将元数据库用于我的业务数据库:
Caused by: org.springframework.jdbc.BadSqlGrammarException: Executing query; bad SQL grammar
我的代码有问题吗?
非常感谢
终于有解决方案了
我的 reader 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());
....
}