- BatchConfiguration.java 파일 생성: SQL Server에서 시퀀스 대신 테이블 기반 ID 생성을 위한 JobRepository 커스터마이징. - application-local.yml 수정: SQL Server 예전 버전에서의 배치 설정 추가. - create_batch_id_tables.sql 스크립트 추가: Spring Batch 메타데이터 테이블 및 ID 생성 테이블 생성. - README_BATCH_SEQUENCE_FIX.md 파일 추가: 문제 해결 가이드 및 적용 방법 문서화.
109 lines
2.9 KiB
Markdown
109 lines
2.9 KiB
Markdown
# Spring Batch Sequence 문제 해결 가이드
|
|
|
|
## 문제 상황
|
|
|
|
SQL Server의 예전 버전(2012 이전)에서는 sequence를 지원하지 않아 Spring Batch 실행 시 오류가 발생할 수 있습니다.
|
|
|
|
## 해결 방법
|
|
|
|
### 1. BatchConfiguration 클래스 생성
|
|
|
|
`src/main/java/com/interplug/qcast/config/batch/BatchConfiguration.java` 파일이 생성되었습니다.
|
|
이 클래스는 JobRepository를 커스터마이징하여 SQL Server에 맞는 설정을 적용합니다.
|
|
|
|
### 2. application.yml 설정 수정
|
|
|
|
`src/main/resources/config/application-local.yml` 파일의 batch 설정이 수정되었습니다:
|
|
|
|
```yaml
|
|
spring:
|
|
batch:
|
|
jdbc:
|
|
initialize-schema: never
|
|
table-prefix: BATCH_
|
|
schema: # 스키마가 필요한 경우 설정
|
|
```
|
|
|
|
### 3. 데이터베이스 테이블 생성
|
|
|
|
`src/main/resources/db/migration/create_batch_id_tables.sql` 스크립트를 실행하여:
|
|
|
|
- Spring Batch 메타데이터 테이블 생성
|
|
- sequence 대신 사용할 ID 생성 테이블 생성
|
|
|
|
## 적용 순서
|
|
|
|
1. **데이터베이스 스크립트 실행**
|
|
|
|
```sql
|
|
-- create_batch_id_tables.sql 파일의 내용을 데이터베이스에서 실행
|
|
```
|
|
|
|
2. **애플리케이션 재시작**
|
|
|
|
- 새로운 BatchConfiguration이 적용됩니다.
|
|
|
|
3. **테스트**
|
|
- 간단한 배치 작업을 실행하여 정상 동작 확인
|
|
|
|
## 주요 변경사항
|
|
|
|
### BatchConfiguration.java
|
|
|
|
- JobRepository를 커스터마이징
|
|
- SQL Server 데이터베이스 타입 명시적 설정
|
|
- 테이블 기반 ID 생성 사용
|
|
|
|
### SQL 스크립트
|
|
|
|
- `BATCH_JOB_SEQ`, `BATCH_JOB_EXECUTION_SEQ`, `BATCH_STEP_EXECUTION_SEQ` 테이블 생성
|
|
- Spring Batch 메타데이터 테이블들 생성 (없는 경우)
|
|
|
|
## 추가 설정 옵션
|
|
|
|
필요에 따라 다음 설정들을 조정할 수 있습니다:
|
|
|
|
### application.yml
|
|
|
|
```yaml
|
|
spring:
|
|
batch:
|
|
jdbc:
|
|
initialize-schema: always # 자동으로 테이블 생성 (개발환경)
|
|
table-prefix: CUSTOM_ # 테이블 prefix 변경
|
|
schema: dbo # 스키마 명시적 설정
|
|
```
|
|
|
|
### BatchConfiguration.java
|
|
|
|
```java
|
|
// 격리 레벨 변경
|
|
factory.setIsolationLevelForCreate("ISOLATION_READ_COMMITTED");
|
|
|
|
// 커스텀 테이블 prefix
|
|
factory.setTablePrefix("CUSTOM_BATCH_");
|
|
```
|
|
|
|
## 문제 해결
|
|
|
|
### 여전히 sequence 오류가 발생하는 경우:
|
|
|
|
1. 데이터베이스에 sequence 관련 객체가 남아있는지 확인
|
|
2. Spring Batch 메타데이터 테이블을 모두 삭제 후 재생성
|
|
3. 애플리케이션 캐시 클리어 후 재시작
|
|
|
|
### 권한 문제:
|
|
|
|
SQL Server에서 테이블 생성 및 ID 생성 테이블 접근 권한이 필요합니다.
|
|
|
|
```sql
|
|
-- 필요한 권한 확인
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON BATCH_* TO [username];
|
|
```
|
|
|
|
## 참고사항
|
|
|
|
- 이 설정은 SQL Server 2008, 2008 R2, 2012 이전 버전에서 사용
|
|
- SQL Server 2012 이후 버전에서도 호환성을 위해 사용 가능
|
|
- 운영환경에서는 `initialize-schema: never`로 설정 권장
|