Spring 启动 Spring 批处理:没有 Spring 批处理元数据的多个数据源 table

Spring Boot Spring Batch : Multiple DataSource without Spring batch metadata table

我正在为 Spring 批处理编写 Spring 引导应用程序,其中 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 批处理元数据 table,我的应用程序不需要监控作业,请就此提出建议。提前致谢!!

根据您的例外情况,看起来 Spring Batch 配置为使用 Postgres 数据源作为其元数据,但它没有找到 BATCH_JOB_INSTANCE table.

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

然后您可以为您的 reader 配置一个 Oracle 数据源,为您的编写器配置一个 Postgres 数据源。

没有什么能阻止在您的 Spring Batch 应用程序中拥有多个数据源,您只需要配置哪个用于您的业务逻辑以及哪个要被 Spring Batch 用于其内部力学.

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

  • Use of multiple DataSources in Spring Batch
  • How to java-configure separate datasources for spring batch data and business data? Should I even do it?

使用以下属性

spring.batch.initialize-schema=总是或从不

否则您可以在您的数据库中创建表。 您还可以在下面的 jar 中找到各个数据库的架构。
Spring-batch-core.jar 如果您使用的是 Maven,则在 Maven 依赖项中。 在类路径中:/org/springframework/batch/core/