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

Spring启动Spring批处理:不带Spring批处理元数据表的多个数据源

司空朝
2023-03-14

我正在编写Spring批的Spring Boot应用程序,其中ItemReader从Oracle数据库读取数据并将数据写入postgres sql,但我得到了以下错误

Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? order by JOB_INSTANCE_ID desc]; nested exception is org.postgresql.util.PSQLException: ERROR: relation "batch_job_instance" does not exist
  Position: 39
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:234) ~[spring-jdbc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402) ~[spring-jdbc-5.0.8.RELEASE.jar:5.0.8.RELEASE]

我不想创建spring批处理元数据表,我的应用程序不需要监视作业,请就此向我提出建议。提前谢谢!!

共有2个答案

水铭晨
2023-03-14

使用以下属性

Spring一批初始化架构=始终或从不

或者您可以在ur DB中创建表。您还可以在下面的jar中找到相应dbs的模式。
如果您在类路径中使用maven,则在maven依赖项中pring-batch-core.jar。

郎鹤龄
2023-03-14

根据您的异常,看起来Spring Batch配置为使用Postgres数据源作为其元数据,但它没有找到BATCH_JOB_INSTANCE表。

如果不想使用元数据表,可以:

  • 使用MapJobRepositoryFactoryBean创建内存中的JobRepository

然后,您可以为您的读者配置Oracle数据源,为您的作者配置Postgres数据源。

没有什么可以阻止Spring Batch应用程序中有多个数据源,您只需要配置哪个数据源用于业务逻辑,哪个数据源用于Spring Batch的内部机制。

有一些类似的问题可能会有所帮助,我在这里添加它们以供参考:

  • 在Spring Batch中使用多个数据源
  • 如何java配置单独的数据源的Spring批处理数据和业务数据?我应该这么做吗?
 类似资料:
  • 我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。 这是我的代码: 批处理配置。JAVA 然后我的itemReader bean看起来像: 当我运行批处理时,一切正常。 但是当我尝试在我的BatchApplication中添

  • 有什么方法可以用spring batch实现这一点,或者我应该创建一个Dao并批量删除每个集合的旧数据。

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

  • 基于Spring boot和batch的项目。我需要使用h2数据库来存储spring批处理表的元数据,以及spring JPA的postgre(由ItemWriter使用)。 我在属性文件中定义了两个独立的属性。 现在,在@配置文件中,为了链接我定义的批处理数据源, 但是,我没有在其他任何地方使用另一个jpa(postgre)db配置(计划将其与JPA链接)。 当我试图运行的项目,我得到下面的异常

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

  • 我需要访问两个数据源: Spring批处理存储库:在内存H2中 我的步骤需要访问。 我在那里看到了几个关于如何创建自定义