当前位置: 首页 > 知识库问答 >
问题:

Spring批处理:将内存数据库用于Spring批处理元数据表

彭烨熠
2023-03-14

我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。

我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。

这是我的代码:

批处理配置。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中添加JobLauncher和JobBean时。java是这样的:

@Autowired
private JobLauncher jobLauncher;

@Autowired
private Job job;

批处理正在尝试将元数据数据库用于我的业务数据库:

原因:org。springframework。jdbc。BadSqlGrammarException:执行查询;糟糕的SQL语法

我的代码有问题吗?

真是多谢了

共有1个答案

翟奇
2023-03-14

最后我得到了一个解决方案

我的读者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 batch实现这一点,或者我应该创建一个Dao并批量删除每个集合的旧数据。

  • 我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误 我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!

  • 我的数据库中有大约1000万个blob格式的文件,我需要转换并以pdf格式保存它们。每个文件大小约为0.5-10mb,组合文件大小约为20 TB。我正在尝试使用spring批处理实现该功能。然而,我的问题是,当我运行批处理时,服务器内存是否可以容纳那么多的数据?我正在尝试使用基于块的处理和线程池任务执行器。请建议运行作业的最佳方法是否可以在更短的时间内处理如此多的数据

  • 我正在尝试更改现有的spring批处理作业(XML配置),它从oracle数据库读取数据,并以所需格式写入txt和XML文件,但现在我想更改相同的实现,从Cassandra数据库而不是oracle读取数据,但我在spring批处理中找不到类似于JdbcCursorItemReader的项目读取器。 有人能告诉我应该使用哪个ItemReader从Cassandra DB读取数据吗?或者我需要创建一个

  • 我在自己的oracle数据库中使用以下链接创建了spring批处理元数据表 https://github.com/spring-projects/spring-batch/tree/main/spring-batch-core/src/main/resources/org/springframework/batch/core 但是当我运行我的Spring批处理时,它会抛出错误: 目前我使用的是sp

  • 我有一个使用JPA的Spring Boot应用程序,它有一个PostgreSQL数据库。我使用的是Spring Batch。场景是我正在读取一个文件并将数据写入PostgreSQL数据库。当程序在数据库中创建Spring Batch使用的元数据表时,它与PostgreSQL一起工作。但我需要的是Spring Boot不要创建元数据表,并通过Spring Batch使用内存中基于映射的作业存储库。我