Springbatch源數據建表語句及初始化

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

創建語句如下:

CREATE TABLE `batch_job_execution` (
	`JOB_EXECUTION_ID` BIGINT (20) NOT NULL,
	`VERSION` BIGINT (20) DEFAULT NULL,
	`JOB_INSTANCE_ID` BIGINT (20) NOT NULL,
	`CREATE_TIME` datetime NOT NULL,
	`START_TIME` datetime DEFAULT NULL,
	`END_TIME` datetime DEFAULT NULL,
	`STATUS` VARCHAR (10) DEFAULT NULL,
	`EXIT_CODE` VARCHAR (2500) DEFAULT NULL,
	`EXIT_MESSAGE` VARCHAR (2500) DEFAULT NULL,
	`LAST_UPDATED` datetime DEFAULT NULL,
	`JOB_CONFIGURATION_LOCATION` VARCHAR (2500) DEFAULT NULL,
	PRIMARY KEY (`JOB_EXECUTION_ID`),
	KEY `JOB_INST_EXEC_FK` (`JOB_INSTANCE_ID`),
	CONSTRAINT `JOB_INST_EXEC_FK` FOREIGN KEY (`JOB_INSTANCE_ID`) REFERENCES `batch_job_instance` (`JOB_INSTANCE_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_job_execution_context` (
	`JOB_EXECUTION_ID` BIGINT (20) NOT NULL,
	`SHORT_CONTEXT` VARCHAR (2500) NOT NULL,
	`SERIALIZED_CONTEXT` text,
	PRIMARY KEY (`JOB_EXECUTION_ID`),
	CONSTRAINT `JOB_EXEC_CTX_FK` FOREIGN KEY (`JOB_EXECUTION_ID`) REFERENCES `batch_job_execution` (`JOB_EXECUTION_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_job_execution_params` (
	`JOB_EXECUTION_ID` BIGINT (20) NOT NULL,
	`TYPE_CD` VARCHAR (6) NOT NULL,
	`KEY_NAME` VARCHAR (100) NOT NULL,
	`STRING_VAL` VARCHAR (250) DEFAULT NULL,
	`DATE_VAL` datetime DEFAULT NULL,
	`LONG_VAL` BIGINT (20) DEFAULT NULL,
	`DOUBLE_VAL` DOUBLE DEFAULT NULL,
	`IDENTIFYING` CHAR (1) NOT NULL,
	KEY `JOB_EXEC_PARAMS_FK` (`JOB_EXECUTION_ID`),
	CONSTRAINT `JOB_EXEC_PARAMS_FK` FOREIGN KEY (`JOB_EXECUTION_ID`) REFERENCES `batch_job_execution` (`JOB_EXECUTION_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_job_execution_seq` (
	`ID` BIGINT (20) NOT NULL,
	`UNIQUE_KEY` CHAR (1) NOT NULL,
	UNIQUE KEY `UNIQUE_KEY_UN` (`UNIQUE_KEY`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_job_instance` (
	`JOB_INSTANCE_ID` BIGINT (20) NOT NULL,
	`VERSION` BIGINT (20) DEFAULT NULL,
	`JOB_NAME` VARCHAR (100) NOT NULL,
	`JOB_KEY` VARCHAR (32) NOT NULL,
	PRIMARY KEY (`JOB_INSTANCE_ID`),
	UNIQUE KEY `JOB_INST_UN` (`JOB_NAME`, `JOB_KEY`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_job_seq` (
	`ID` BIGINT (20) NOT NULL,
	`UNIQUE_KEY` CHAR (1) NOT NULL,
	UNIQUE KEY `UNIQUE_KEY_UN` (`UNIQUE_KEY`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_step_execution` (
	`STEP_EXECUTION_ID` BIGINT (20) NOT NULL,
	`VERSION` BIGINT (20) NOT NULL,
	`STEP_NAME` VARCHAR (100) NOT NULL,
	`JOB_EXECUTION_ID` BIGINT (20) NOT NULL,
	`START_TIME` datetime NOT NULL,
	`END_TIME` datetime DEFAULT NULL,
	`STATUS` VARCHAR (10) DEFAULT NULL,
	`COMMIT_COUNT` BIGINT (20) DEFAULT NULL,
	`READ_COUNT` BIGINT (20) DEFAULT NULL,
	`FILTER_COUNT` BIGINT (20) DEFAULT NULL,
	`WRITE_COUNT` BIGINT (20) DEFAULT NULL,
	`READ_SKIP_COUNT` BIGINT (20) DEFAULT NULL,
	`WRITE_SKIP_COUNT` BIGINT (20) DEFAULT NULL,
	`PROCESS_SKIP_COUNT` BIGINT (20) DEFAULT NULL,
	`ROLLBACK_COUNT` BIGINT (20) DEFAULT NULL,
	`EXIT_CODE` VARCHAR (2500) DEFAULT NULL,
	`EXIT_MESSAGE` VARCHAR (2500) DEFAULT NULL,
	`LAST_UPDATED` datetime DEFAULT NULL,
	PRIMARY KEY (`STEP_EXECUTION_ID`),
	KEY `JOB_EXEC_STEP_FK` (`JOB_EXECUTION_ID`),
	CONSTRAINT `JOB_EXEC_STEP_FK` FOREIGN KEY (`JOB_EXECUTION_ID`) REFERENCES `batch_job_execution` (`JOB_EXECUTION_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_step_execution_context` (
	`STEP_EXECUTION_ID` BIGINT (20) NOT NULL,
	`SHORT_CONTEXT` VARCHAR (2500) NOT NULL,
	`SERIALIZED_CONTEXT` text,
	PRIMARY KEY (`STEP_EXECUTION_ID`),
	CONSTRAINT `STEP_EXEC_CTX_FK` FOREIGN KEY (`STEP_EXECUTION_ID`) REFERENCES `batch_step_execution` (`STEP_EXECUTION_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

CREATE TABLE `batch_step_execution_seq` (
	`ID` BIGINT (20) NOT NULL,
	`UNIQUE_KEY` CHAR (1) NOT NULL,
	UNIQUE KEY `UNIQUE_KEY_UN` (`UNIQUE_KEY`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;

創建完表之後,運行程序,會發現,第一次運行會正常,第二次則會報出類似錯誤:

2018-12-21 09:16:09.027 ERROR 20408 --- [nio-8080-exec-4] druid.sql.Statement                      : {conn-110001, pstmt-120005} execute error. INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '0' for key 'PRIMARY'

這是源數據表未做初始化導致的,初始化語句如下:


INSERT INTO BATCH_STEP_EXECUTION_SEQ (ID, UNIQUE_KEY) SELECT
	*
FROM
	(
		SELECT
			0 AS ID,
			'0' AS UNIQUE_KEY
	) AS tmp
WHERE
	NOT EXISTS (
		SELECT
			*
		FROM
			BATCH_STEP_EXECUTION_SEQ
	);

INSERT INTO BATCH_JOB_EXECUTION_SEQ (ID, UNIQUE_KEY) SELECT
	*
FROM
	(
		SELECT
			0 AS ID,
			'0' AS UNIQUE_KEY
	) AS tmp
WHERE
	NOT EXISTS (
		SELECT
			*
		FROM
			BATCH_JOB_EXECUTION_SEQ
	);

INSERT INTO BATCH_JOB_SEQ (ID, UNIQUE_KEY) SELECT
	*
FROM
	(
		SELECT
			0 AS ID,
			'0' AS UNIQUE_KEY
	) AS tmp
WHERE
	NOT EXISTS (SELECT * FROM BATCH_JOB_SEQ);


再運行程序,發現一切OK了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章