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)配置禁用自动创建数据库