Spring Batch Framework - 自动创建批处理表

Ein*_*ann 21 database privileges spring ora-00942 spring-batch

我刚刚使用Spring Batch框架创建了一个批处理作业,但是我没有运行CREATE SQL的数据库权限.当我尝试运行批处理作业时,我在框架尝试创建TABLE_BATCH_INSTANCE时遇到错误.我试着禁用

<jdbc:initialize-database data-source="dataSource" enabled="false">    
 ...
</jdbc:initialize-database>
Run Code Online (Sandbox Code Playgroud)

但在我尝试之后我仍然遇到了错误

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

无论如何可以禁用SQL,我只想测试我的读写器和处理器正常工作.

Pim*_*oek 29

使用Spring Boot 2.0,你可能需要这样:https: //docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#howto-initialize-a-spring-batch-database

spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)

默认情况下,只有在使用嵌入式数据库时才会创建表.

要么

 spring.batch.initialize-schema=never
Run Code Online (Sandbox Code Playgroud)

永久禁用它.


小智 14

Spring Batch使用数据库来保存其恢复/重试功能的元数据.

如果无法在数据库中创建表,则必须禁用此行为

如果您可以创建批处理元数据表但不能在运行时创建,那么您可以手动创建它们


vaq*_*han 11

Spring Batch 需要下表来运行作业

  • BATCH_JOB_EXECUTION
  • BATCH_JOB_EXECUTION_CONTEXT
  • BATCH_JOB_EXECUTION_PARAMS
  • BATCH_JOB_EXECUTION_SEQ
  • BATCH_JOB_INSTANCE
  • BATCH_JOB_SEQ
  • BATCH_STEP_EXECUTION
  • BATCH_STEP_EXECUTION_CONTEXT
  • BATCH_STEP_EXECUTION_SEQ

如果您使用的是 h2 db,则默认情况下它将创建所有必需的表

  • spring.h2.console.enabled=true
  • spring.datasource.url=jdbc:h2:mem:testdb
  • spring.datasource.driverClassName=org.h2.Driver
  • spring.datasource.username=sa
  • spring.datasource.password=
  • spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

当您开始使用 Mysql 或任何其他数据库时,您需要将以下属性添加到 application.properties 中

               spring.batch.initialize-schema=always
Run Code Online (Sandbox Code Playgroud)


Dat*_*atz 11

自 Spring Boot 2.5.0 使用

# to always initialize the datasource:
spring.batch.jdbc.initialize-schema=always

# to only initialize an embedded datasource:
spring.batch.jdbc.initialize-schema=embedded

# to never initialize the datasource:
spring.batch.jdbc.initialize-schema=never
Run Code Online (Sandbox Code Playgroud)

spring.batch.initialize-schema自 2.5.0 起已弃用,并在 2.7.0 中删除)


小智 5

要启用自动创建spring batch data-schema,只需将此行添加到spring application.properties文件中:

spring.batch.initialize-schema =总是

要了解有关Spring批处理元数据架构的更多信息:

https://docs.spring.io/spring-batch/trunk/reference/html/metaDataSchema.html