Spring Boot Spring Batch:没有 Spring 批处理元数据表的多个 DataSource

Posted

技术标签:

【中文标题】Spring Boot Spring Batch:没有 Spring 批处理元数据表的多个 DataSource【英文标题】:Spring Boot Spring Batch : Multiple DataSource without Spring batch metadata table 【发布时间】:2019-01-19 04:38:07 【问题描述】:

我正在为 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 Batch 元数据表,我的应用程序不需要监视作业,请就此提出建议。提前致谢!!

【问题讨论】:

【参考方案1】:

使用下面的属性

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

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

【讨论】:

【参考方案2】:

根据您的例外情况,Spring Batch 似乎配置为使用 Postgres 数据源作为其元数据,但找不到 BATCH_JOB_INSTANCE 表。

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

使用MapJobRepositoryFactoryBean 创建内存中JobRepository 使用带有ResourcelessTransactionManager 的嵌入式数据库(H2、HSQL 等)。 Spring Boot 会自动为你在内存数据源中创建表(更多细节在这里:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#howto-initialize-a-spring-batch-database)。

然后您可以为您的阅读器配置一个 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?

【讨论】:

谢谢!!对于 deatiles 的解释,到目前为止,我将批处理元数据保存在 postgres 中。 @Mahmoud - 请您在这里指导:***.com/questions/59544730/…

以上是关于Spring Boot Spring Batch:没有 Spring 批处理元数据表的多个 DataSource的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-starter-jta-atomikos 和 spring-boot-starter-batch

Spring boot spring.batch.job.enabled=false 无法识别

Spring boot spring.batch.job.enabled=false 无法识别

spring boot(spring batch)配置禁用自动创建数据库

使用 spring-boot 连接到 spring-batch 和应用程序数据库

Spring Boot 之 Spring Batch 批处理实践