From 59cf3310e862ad24aac006565fa0b6421e932b3f Mon Sep 17 00:00:00 2001 From: zbw1231 <2313386675@qq.com> Date: Sun, 30 Mar 2025 15:44:32 +0800 Subject: [PATCH 1/3] add support for kingbase --- .../builder/JdbcPagingItemReaderBuilder.java | 15 ++--------- ...ltDataFieldMaxValueIncrementerFactory.java | 18 +++---------- .../support/KingbasePagingQueryProvider.java | 27 +++++++++++++++++++ .../SqlPagingQueryProviderFactoryBean.java | 19 +++---------- .../batch/support/DatabaseType.java | 2 +- 5 files changed, 37 insertions(+), 44 deletions(-) create mode 100644 spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/KingbasePagingQueryProvider.java diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java index 408263ea42..3074fa573a 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java @@ -21,19 +21,7 @@ import org.springframework.batch.item.database.JdbcPagingItemReader; import org.springframework.batch.item.database.Order; import org.springframework.batch.item.database.PagingQueryProvider; -import org.springframework.batch.item.database.support.AbstractSqlPagingQueryProvider; -import org.springframework.batch.item.database.support.Db2PagingQueryProvider; -import org.springframework.batch.item.database.support.DerbyPagingQueryProvider; -import org.springframework.batch.item.database.support.H2PagingQueryProvider; -import org.springframework.batch.item.database.support.HanaPagingQueryProvider; -import org.springframework.batch.item.database.support.HsqlPagingQueryProvider; -import org.springframework.batch.item.database.support.MariaDBPagingQueryProvider; -import org.springframework.batch.item.database.support.MySqlPagingQueryProvider; -import org.springframework.batch.item.database.support.OraclePagingQueryProvider; -import org.springframework.batch.item.database.support.PostgresPagingQueryProvider; -import org.springframework.batch.item.database.support.SqlServerPagingQueryProvider; -import org.springframework.batch.item.database.support.SqlitePagingQueryProvider; -import org.springframework.batch.item.database.support.SybasePagingQueryProvider; +import org.springframework.batch.item.database.support.*; import org.springframework.batch.support.DatabaseType; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.DataClassRowMapper; @@ -361,6 +349,7 @@ protected PagingQueryProvider determineQueryProvider(DataSource dataSource) { case MARIADB -> new MariaDBPagingQueryProvider(); case ORACLE -> new OraclePagingQueryProvider(); case POSTGRES -> new PostgresPagingQueryProvider(); + case KINGBASE -> new KingbasePagingQueryProvider(); case SYBASE -> new SybasePagingQueryProvider(); case SQLITE -> new SqlitePagingQueryProvider(); }; diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java index ef9c279cf8..00a6b0943e 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java @@ -34,20 +34,7 @@ import org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.MariaDBSequenceMaxValueIncrementer; -import static org.springframework.batch.support.DatabaseType.DB2; -import static org.springframework.batch.support.DatabaseType.DB2AS400; -import static org.springframework.batch.support.DatabaseType.DB2ZOS; -import static org.springframework.batch.support.DatabaseType.DERBY; -import static org.springframework.batch.support.DatabaseType.H2; -import static org.springframework.batch.support.DatabaseType.HANA; -import static org.springframework.batch.support.DatabaseType.HSQL; -import static org.springframework.batch.support.DatabaseType.MARIADB; -import static org.springframework.batch.support.DatabaseType.MYSQL; -import static org.springframework.batch.support.DatabaseType.ORACLE; -import static org.springframework.batch.support.DatabaseType.POSTGRES; -import static org.springframework.batch.support.DatabaseType.SQLITE; -import static org.springframework.batch.support.DatabaseType.SQLSERVER; -import static org.springframework.batch.support.DatabaseType.SYBASE; +import static org.springframework.batch.support.DatabaseType.*; /** * Default implementation of the {@link DataFieldMaxValueIncrementerFactory} interface. @@ -120,6 +107,9 @@ else if (databaseType == ORACLE) { else if (databaseType == POSTGRES) { return new PostgresSequenceMaxValueIncrementer(dataSource, incrementerName); } + else if (databaseType == KINGBASE) { + return new PostgresSequenceMaxValueIncrementer(dataSource, incrementerName); + } else if (databaseType == SQLITE) { return new SqliteMaxValueIncrementer(dataSource, incrementerName, incrementerColumnName); } diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/KingbasePagingQueryProvider.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/KingbasePagingQueryProvider.java new file mode 100644 index 0000000000..c6a503e5df --- /dev/null +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/KingbasePagingQueryProvider.java @@ -0,0 +1,27 @@ +package org.springframework.batch.item.database.support; + +import org.springframework.util.StringUtils; + + +public class KingbasePagingQueryProvider extends AbstractSqlPagingQueryProvider { + + @Override + public String generateFirstPageQuery(int pageSize) { + return SqlPagingQueryUtils.generateLimitSqlQuery(this, false, buildLimitClause(pageSize)); + } + + @Override + public String generateRemainingPagesQuery(int pageSize) { + if (StringUtils.hasText(getGroupClause())) { + return SqlPagingQueryUtils.generateLimitGroupedSqlQuery(this, buildLimitClause(pageSize)); + } + else { + return SqlPagingQueryUtils.generateLimitSqlQuery(this, true, buildLimitClause(pageSize)); + } + } + + private String buildLimitClause(int pageSize) { + return new StringBuilder().append("LIMIT ").append(pageSize).toString(); + } + +} diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java index 608e0f2e5b..aa4aa93305 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java @@ -15,22 +15,6 @@ */ package org.springframework.batch.item.database.support; -import static org.springframework.batch.support.DatabaseType.DB2; -import static org.springframework.batch.support.DatabaseType.DB2VSE; -import static org.springframework.batch.support.DatabaseType.DB2ZOS; -import static org.springframework.batch.support.DatabaseType.DB2AS400; -import static org.springframework.batch.support.DatabaseType.DERBY; -import static org.springframework.batch.support.DatabaseType.H2; -import static org.springframework.batch.support.DatabaseType.HANA; -import static org.springframework.batch.support.DatabaseType.HSQL; -import static org.springframework.batch.support.DatabaseType.MARIADB; -import static org.springframework.batch.support.DatabaseType.MYSQL; -import static org.springframework.batch.support.DatabaseType.ORACLE; -import static org.springframework.batch.support.DatabaseType.POSTGRES; -import static org.springframework.batch.support.DatabaseType.SQLITE; -import static org.springframework.batch.support.DatabaseType.SQLSERVER; -import static org.springframework.batch.support.DatabaseType.SYBASE; - import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -45,6 +29,8 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import static org.springframework.batch.support.DatabaseType.*; + /** * Factory bean for {@link PagingQueryProvider} interface. The database type will be * determined from the data source if not provided explicitly. Valid types are given by @@ -85,6 +71,7 @@ public class SqlPagingQueryProviderFactoryBean implements FactoryBean nameMap; From fa90eb79d2e740e9b6f683cf2a59f44611ff8eb7 Mon Sep 17 00:00:00 2001 From: dbgroupdlmu Date: Tue, 22 Apr 2025 14:14:24 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=BA=E5=A4=A7?= =?UTF-8?q?=E9=87=91=E4=BB=93=E4=B8=89=E7=A7=8D=E6=A8=A1=E5=BC=8F=E7=9A=84?= =?UTF-8?q?=E5=BB=BA=E8=A1=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../batch/core/schema-drop-kingbasemysql.sql | 11 +++ .../batch/core/schema-drop-kingbaseoracle.sql | 11 +++ .../core/schema-drop-kingbasesqlserver.sql | 11 +++ .../batch/core/schema-kingbasemysql.sql | 78 +++++++++++++++++++ .../batch/core/schema-kingbaseoracle.sql | 78 +++++++++++++++++++ .../batch/core/schema-kingbasesqlserver.sql | 78 +++++++++++++++++++ 6 files changed, 267 insertions(+) create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasemysql.sql create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbaseoracle.sql create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasesqlserver.sql create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasemysql.sql create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbaseoracle.sql create mode 100644 spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasesqlserver.sql diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasemysql.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasemysql.sql new file mode 100644 index 0000000000..852211838b --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasemysql.sql @@ -0,0 +1,11 @@ +-- Autogenerated: do not edit this file +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_PARAMS; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_INSTANCE; + +DROP SEQUENCE IF EXISTS BATCH_STEP_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbaseoracle.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbaseoracle.sql new file mode 100644 index 0000000000..852211838b --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbaseoracle.sql @@ -0,0 +1,11 @@ +-- Autogenerated: do not edit this file +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_PARAMS; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_INSTANCE; + +DROP SEQUENCE IF EXISTS BATCH_STEP_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasesqlserver.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasesqlserver.sql new file mode 100644 index 0000000000..852211838b --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-drop-kingbasesqlserver.sql @@ -0,0 +1,11 @@ +-- Autogenerated: do not edit this file +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_CONTEXT; +DROP TABLE IF EXISTS BATCH_STEP_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION_PARAMS; +DROP TABLE IF EXISTS BATCH_JOB_EXECUTION; +DROP TABLE IF EXISTS BATCH_JOB_INSTANCE; + +DROP SEQUENCE IF EXISTS BATCH_STEP_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_EXECUTION_SEQ; +DROP SEQUENCE IF EXISTS BATCH_JOB_SEQ; diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasemysql.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasemysql.sql new file mode 100644 index 0000000000..7ad368b4ff --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasemysql.sql @@ -0,0 +1,78 @@ +-- Autogenerated: do not edit this file + +CREATE TABLE IF NOT EXISTS BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + JOB_NAME VARCHAR(100) NOT NULL, + JOB_KEY VARCHAR(32) NOT NULL, + constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) +); + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + JOB_INSTANCE_ID BIGINT NOT NULL, + CREATE_TIME DATETIME(6) NOT NULL, + START_TIME DATETIME(6) DEFAULT NULL , + END_TIME DATETIME(6) DEFAULT NULL , + STATUS VARCHAR(10) , + EXIT_CODE VARCHAR(2500) , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME(6), + constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +); + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION_PARAMS ( + JOB_EXECUTION_ID BIGINT NOT NULL , + PARAMETER_NAME VARCHAR(100) NOT NULL , + PARAMETER_TYPE VARCHAR(100) NOT NULL , + PARAMETER_VALUE VARCHAR(2500) , + IDENTIFYING CHAR(1) NOT NULL , + constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE TABLE IF NOT EXISTS BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + CREATE_TIME DATETIME(6) NOT NULL, + START_TIME DATETIME(6) DEFAULT NULL , + END_TIME DATETIME(6) DEFAULT NULL , + STATUS VARCHAR(10) , + COMMIT_COUNT BIGINT , + READ_COUNT BIGINT , + FILTER_COUNT BIGINT , + WRITE_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + PROCESS_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , + EXIT_CODE VARCHAR(2500) , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME(6), + constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE TABLE IF NOT EXISTS BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT TEXT , + constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +); + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION_CONTEXT ( + JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT TEXT , + constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE SEQUENCE IF NOT EXISTS BATCH_STEP_EXECUTION_SEQ MAXVALUE 9223372036854775807 NO CYCLE; +CREATE SEQUENCE IF NOT EXISTS BATCH_JOB_EXECUTION_SEQ MAXVALUE 9223372036854775807 NO CYCLE; +CREATE SEQUENCE IF NOT EXISTS BATCH_JOB_SEQ MAXVALUE 9223372036854775807 NO CYCLE; diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbaseoracle.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbaseoracle.sql new file mode 100644 index 0000000000..209ea31c77 --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbaseoracle.sql @@ -0,0 +1,78 @@ +-- Autogenerated: do not edit this file + +CREATE TABLE BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID NUMBER(19,0) NOT NULL PRIMARY KEY , + VERSION NUMBER(19,0) , + JOB_NAME VARCHAR2(100 char) NOT NULL, + JOB_KEY VARCHAR2(32 char) NOT NULL, + constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) +); + +CREATE TABLE BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY , + VERSION NUMBER(19,0) , + JOB_INSTANCE_ID NUMBER(19,0) NOT NULL, + CREATE_TIME TIMESTAMP(9) NOT NULL, + START_TIME TIMESTAMP(9) DEFAULT NULL , + END_TIME TIMESTAMP(9) DEFAULT NULL , + STATUS VARCHAR2(10 char) , + EXIT_CODE VARCHAR2(2500 char) , + EXIT_MESSAGE VARCHAR2(2500 char) , + LAST_UPDATED TIMESTAMP(9), + constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +); + +CREATE TABLE BATCH_JOB_EXECUTION_PARAMS ( + JOB_EXECUTION_ID NUMBER(19,0) NOT NULL , + PARAMETER_NAME VARCHAR(100 char) NOT NULL , + PARAMETER_TYPE VARCHAR(100 char) NOT NULL , + PARAMETER_VALUE VARCHAR(2500 char) , + IDENTIFYING CHAR(1) NOT NULL , + constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE TABLE BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY , + VERSION NUMBER(19,0) NOT NULL, + STEP_NAME VARCHAR2(100 char) NOT NULL, + JOB_EXECUTION_ID NUMBER(19,0) NOT NULL, + CREATE_TIME TIMESTAMP(9) NOT NULL, + START_TIME TIMESTAMP(9) DEFAULT NULL , + END_TIME TIMESTAMP(9) DEFAULT NULL , + STATUS VARCHAR2(10 char) , + COMMIT_COUNT NUMBER(19,0) , + READ_COUNT NUMBER(19,0) , + FILTER_COUNT NUMBER(19,0) , + WRITE_COUNT NUMBER(19,0) , + READ_SKIP_COUNT NUMBER(19,0) , + WRITE_SKIP_COUNT NUMBER(19,0) , + PROCESS_SKIP_COUNT NUMBER(19,0) , + ROLLBACK_COUNT NUMBER(19,0) , + EXIT_CODE VARCHAR2(2500 char) , + EXIT_MESSAGE VARCHAR2(2500 char) , + LAST_UPDATED TIMESTAMP(9), + constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR2(2500 char) NOT NULL, + SERIALIZED_CONTEXT CLOB , + constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +); + +CREATE TABLE BATCH_JOB_EXECUTION_CONTEXT ( + JOB_EXECUTION_ID NUMBER(19,0) NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR2(2500 char) NOT NULL, + SERIALIZED_CONTEXT CLOB , + constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +); + +CREATE SEQUENCE BATCH_STEP_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 ORDER NOCYCLE; +CREATE SEQUENCE BATCH_JOB_EXECUTION_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 ORDER NOCYCLE; +CREATE SEQUENCE BATCH_JOB_SEQ START WITH 0 MINVALUE 0 MAXVALUE 9223372036854775807 ORDER NOCYCLE; diff --git a/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasesqlserver.sql b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasesqlserver.sql new file mode 100644 index 0000000000..1c40ab45c9 --- /dev/null +++ b/spring-batch-core/src/main/resources/org/springframework/batch/core/schema-kingbasesqlserver.sql @@ -0,0 +1,78 @@ +-- Autogenerated: do not edit this file + +CREATE TABLE IF NOT EXISTS BATCH_JOB_INSTANCE ( + JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + JOB_NAME VARCHAR(100) NOT NULL, + JOB_KEY VARCHAR(32) NOT NULL, + constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY) +) ; + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION ( + JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT , + JOB_INSTANCE_ID BIGINT NOT NULL, + CREATE_TIME DATETIME2 NOT NULL, + START_TIME DATETIME2 DEFAULT NULL , + END_TIME DATETIME2 DEFAULT NULL , + STATUS VARCHAR(10) , + EXIT_CODE VARCHAR(2500) , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME2, + constraint JOB_INST_EXEC_FK foreign key (JOB_INSTANCE_ID) + references BATCH_JOB_INSTANCE(JOB_INSTANCE_ID) +) ; + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION_PARAMS ( + JOB_EXECUTION_ID BIGINT NOT NULL , + PARAMETER_NAME VARCHAR(100) NOT NULL , + PARAMETER_TYPE VARCHAR(100) NOT NULL , + PARAMETER_VALUE VARCHAR(2500) , + IDENTIFYING CHAR(1) NOT NULL , + constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE IF NOT EXISTS BATCH_STEP_EXECUTION ( + STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY , + VERSION BIGINT NOT NULL, + STEP_NAME VARCHAR(100) NOT NULL, + JOB_EXECUTION_ID BIGINT NOT NULL, + CREATE_TIME DATETIME2 NOT NULL, + START_TIME DATETIME2 DEFAULT NULL , + END_TIME DATETIME2 DEFAULT NULL , + STATUS VARCHAR(10) , + COMMIT_COUNT BIGINT , + READ_COUNT BIGINT , + FILTER_COUNT BIGINT , + WRITE_COUNT BIGINT , + READ_SKIP_COUNT BIGINT , + WRITE_SKIP_COUNT BIGINT , + PROCESS_SKIP_COUNT BIGINT , + ROLLBACK_COUNT BIGINT , + EXIT_CODE VARCHAR(2500) , + EXIT_MESSAGE VARCHAR(2500) , + LAST_UPDATED DATETIME2, + constraint JOB_EXEC_STEP_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE TABLE IF NOT EXISTS BATCH_STEP_EXECUTION_CONTEXT ( + STEP_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT TEXT , + constraint STEP_EXEC_CTX_FK foreign key (STEP_EXECUTION_ID) + references BATCH_STEP_EXECUTION(STEP_EXECUTION_ID) +) ; + +CREATE TABLE IF NOT EXISTS BATCH_JOB_EXECUTION_CONTEXT ( + JOB_EXECUTION_ID BIGINT NOT NULL PRIMARY KEY, + SHORT_CONTEXT VARCHAR(2500) NOT NULL, + SERIALIZED_CONTEXT TEXT , + constraint JOB_EXEC_CTX_FK foreign key (JOB_EXECUTION_ID) + references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID) +) ; + +CREATE SEQUENCE IF NOT EXISTS BATCH_STEP_EXECUTION_SEQ MAXVALUE 9223372036854775807 NO CYCLE; +CREATE SEQUENCE IF NOT EXISTS BATCH_JOB_EXECUTION_SEQ MAXVALUE 9223372036854775807 NO CYCLE; +CREATE SEQUENCE IF NOT EXISTS BATCH_JOB_SEQ MAXVALUE 9223372036854775807 NO CYCLE; From ff44c41187c4ae34c109a7dfe2954b54d7914908 Mon Sep 17 00:00:00 2001 From: dbgroupdlmu Date: Tue, 22 Apr 2025 14:36:05 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8F=96=E6=B6=88=E9=80=9A=E9=85=8D?= =?UTF-8?q?=E7=AC=A6=E7=9A=84=E4=BD=BF=E7=94=A8=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/JdbcPagingItemReaderBuilder.java | 15 ++++++++++++++- ...ltDataFieldMaxValueIncrementerFactory.java | 16 +++++++++++++++- .../SqlPagingQueryProviderFactoryBean.java | 19 +++++++++++++++++-- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java index 3074fa573a..7da76c11d1 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/builder/JdbcPagingItemReaderBuilder.java @@ -21,7 +21,20 @@ import org.springframework.batch.item.database.JdbcPagingItemReader; import org.springframework.batch.item.database.Order; import org.springframework.batch.item.database.PagingQueryProvider; -import org.springframework.batch.item.database.support.*; +import org.springframework.batch.item.database.support.AbstractSqlPagingQueryProvider; +import org.springframework.batch.item.database.support.Db2PagingQueryProvider; +import org.springframework.batch.item.database.support.DerbyPagingQueryProvider; +import org.springframework.batch.item.database.support.H2PagingQueryProvider; +import org.springframework.batch.item.database.support.HanaPagingQueryProvider; +import org.springframework.batch.item.database.support.HsqlPagingQueryProvider; +import org.springframework.batch.item.database.support.MariaDBPagingQueryProvider; +import org.springframework.batch.item.database.support.MySqlPagingQueryProvider; +import org.springframework.batch.item.database.support.OraclePagingQueryProvider; +import org.springframework.batch.item.database.support.PostgresPagingQueryProvider; +import org.springframework.batch.item.database.support.SqlServerPagingQueryProvider; +import org.springframework.batch.item.database.support.SqlitePagingQueryProvider; +import org.springframework.batch.item.database.support.SybasePagingQueryProvider; +import org.springframework.batch.item.database.support.KingbasePagingQueryProvider; import org.springframework.batch.support.DatabaseType; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.DataClassRowMapper; diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java index 00a6b0943e..c5861d9bd4 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/DefaultDataFieldMaxValueIncrementerFactory.java @@ -34,7 +34,21 @@ import org.springframework.jdbc.support.incrementer.SybaseMaxValueIncrementer; import org.springframework.jdbc.support.incrementer.MariaDBSequenceMaxValueIncrementer; -import static org.springframework.batch.support.DatabaseType.*; +import static org.springframework.batch.support.DatabaseType.DB2; +import static org.springframework.batch.support.DatabaseType.DB2AS400; +import static org.springframework.batch.support.DatabaseType.DB2ZOS; +import static org.springframework.batch.support.DatabaseType.DERBY; +import static org.springframework.batch.support.DatabaseType.H2; +import static org.springframework.batch.support.DatabaseType.HANA; +import static org.springframework.batch.support.DatabaseType.HSQL; +import static org.springframework.batch.support.DatabaseType.MARIADB; +import static org.springframework.batch.support.DatabaseType.MYSQL; +import static org.springframework.batch.support.DatabaseType.ORACLE; +import static org.springframework.batch.support.DatabaseType.POSTGRES; +import static org.springframework.batch.support.DatabaseType.SQLITE; +import static org.springframework.batch.support.DatabaseType.SQLSERVER; +import static org.springframework.batch.support.DatabaseType.SYBASE; +import static org.springframework.batch.support.DatabaseType.KINGBASE; /** * Default implementation of the {@link DataFieldMaxValueIncrementerFactory} interface. diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java index aa4aa93305..2d2f58c520 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/database/support/SqlPagingQueryProviderFactoryBean.java @@ -15,6 +15,23 @@ */ package org.springframework.batch.item.database.support; +import static org.springframework.batch.support.DatabaseType.DB2; +import static org.springframework.batch.support.DatabaseType.DB2VSE; +import static org.springframework.batch.support.DatabaseType.DB2ZOS; +import static org.springframework.batch.support.DatabaseType.DB2AS400; +import static org.springframework.batch.support.DatabaseType.DERBY; +import static org.springframework.batch.support.DatabaseType.H2; +import static org.springframework.batch.support.DatabaseType.HANA; +import static org.springframework.batch.support.DatabaseType.HSQL; +import static org.springframework.batch.support.DatabaseType.MARIADB; +import static org.springframework.batch.support.DatabaseType.MYSQL; +import static org.springframework.batch.support.DatabaseType.ORACLE; +import static org.springframework.batch.support.DatabaseType.POSTGRES; +import static org.springframework.batch.support.DatabaseType.SQLITE; +import static org.springframework.batch.support.DatabaseType.SQLSERVER; +import static org.springframework.batch.support.DatabaseType.SYBASE; +import static org.springframework.batch.support.DatabaseType.KINGBASE; + import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -29,8 +46,6 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import static org.springframework.batch.support.DatabaseType.*; - /** * Factory bean for {@link PagingQueryProvider} interface. The database type will be * determined from the data source if not provided explicitly. Valid types are given by