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,您可以:
- 使用
MapJobRepositoryFactoryBean
创建内存JobRepository
- 在
ResourcelessTransactionManager
中使用嵌入式数据库(H2、HSQL 等)。 Spring Boot 会自动在内存数据源中为您创建 tables(更多详细信息:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#howto-initialize-a-spring-batch-database)。
然后您可以为您的 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/
我正在为 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,您可以:
- 使用
MapJobRepositoryFactoryBean
创建内存JobRepository
- 在
ResourcelessTransactionManager
中使用嵌入式数据库(H2、HSQL 等)。 Spring Boot 会自动在内存数据源中为您创建 tables(更多详细信息:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/#howto-initialize-a-spring-batch-database)。
然后您可以为您的 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/