inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.

2장. 작전1: FlatFileItemReader (시스템의 마지막 기록을 읽어내다 ☠️)

2강 작전1. csv/fixedLength 윈도우 실행 관련 유의사항 제보

117

Hyo Kyun Lee

작성한 질문수 12

1

현재 윈도우 환경에서 학습 중이어서 형님께서 싫어하실 수 있겠지만, 꽤나 흥미로운 것을 발견해서 형님께(강의내용에 도움이 되실 수도 있을까 하여) 제보드립니다!

참고로 저의 경우 IntelliJ의 powershell에서 echo를 하고 csv/txt내용수정은 IntelliJ에서 직접 하였습니다.

1) csv 실행시 오류
최초 실행시 파싱불가 오류가 발생하였는데, csv파일에서 문제점은 없을 것으로 판단하여 프로젝트의 인코딩을 utf-8에서 EUC-KR로 변경해주었습니다. 이러면 정상 작동하였습니다.

{36F91887-83B2-4C6E-81D1-95598A514A99}.png


2) fixedLength 실행시 오류
역시 최초 실행시 파싱불가 오류가 발생하였습니다.

로그를 살펴보았을때

 

{BB287F25-F29E-4767-9D4F-54A09AC5350A}.png

 

인코딩이 잘못되었을 것으로 판단하여 프로젝트의 인코딩 설정과 해당 txt파일의 인코딩 설정을 모두 utf-8로 바꿔주었습니다(utf-16/utf-16LE/utf-16BE 모두 오류 발생, 특히 저 인코딩 문제는 utf-8에서만 유일하게 발생하지 않아서 utf-8 인코딩만 가능한 것으로 보임).

이래도 파싱문제가 발생하였는데,


.columns(new Range[]{ new Range(1, 8), // errorId: ERR001 + 2 new Range(9, 29), // errorDateTime: 19 + 2 new Range(30, 38), // severity: CRITICAL/FATAL + padding new Range(39, 44), // processId: 1234 + 2 new Range(45, 66) // errorMessage: msg + \n })

 

severity 부분을 30 ~ 39 가 아닌 30 ~ 38로 바꿔주었고

마지막 errorMessage 부분을 46 ~ 66이 아닌 45 ~ 66으로 바꿔주었습니다(21자리 -> 22자리)

echo로 공백을 입력해주었지만 실제 파일을 보았을때는 공백이 먹히지 않았던 것 같습니다. 그래서 아래와 같이 공백대신 문자열 1개를 그냥 입력해주었습니다.

 

{DD100314-8AA9-40B0-8E8F-74F80A91FDA1}.png

 

echo를 통한 개행이 먹히지 않아 위와 같이 intellij로 txt파일을 변경해주었습니다.

마지막 문자는 DETECT + 공백 + 개행 -> DETECTS + 개행으로 공백을 제거해주었습니다.

 

{B2152AB8-F5A5-4185-95F2-98EBD490D695}.png

 

이렇게 했을때 최종적으로 빌드성공하였습니다.

저 Range범위, 특히 severity 범위를 왜 저렇게 구성해야 하는지, 이게 윈도우 실행 환경만 이런건지, 제 환경에서만 이런 문제가 발생하는건지..아직도 모르겠지만..

 

형님께 제보를 해드리면 좋을 것 같아서 남겨봅니다!

java spring spring-boot spring-batch backend

답변 1

1

KILL-9

아니?? 고맙다
효균형 진짜 원인을
주말 중 찾아보겠다

버그 제보 고맙다 💀💀

1

Hyo Kyun Lee

형님 몇가지 정정해드립니다.

1) csv
-> 최초 생성시 echo 생성
-> 이 파일을 다른 이름으로 저장해서 .csv(utf-8)로 형식 변경
-> 이를 읽을때 EUC-KR/utf-8 형태로 인코딩 바꿔서 읽으면 됨

2) .txt
-> 최초 생성시 echo 생성
-> 이 파일도 마찬가지로 다른 이름으로 저장해서 utf-8 형식 변경(확장자는.txt 그대로)
-> 이를 읽을때 utf-8형태로 인코딩 바꿔서 읽으면 됨(단 고정길이의 경우 column 길이를 수정해주어야 합니다)

 

감기조심하세요 형

1

KILL-9

고맙다 형 
형도 감기조심하라
나는 오늘 패딩 샀다 💀💀

형 책 어떻게 받아?

1

59

1

JpaCursorItemReader의 정렬 조건 부재의 영향

1

46

2

"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션

1

52

2

형 이번에 낸 책이랑 강의 내용에 차이가 있어?

1

90

1

형 나 몰래 책내면 모를 줄 알고?

2

78

2

강의 중복 확인 요청

1

43

1

중복내용 제보?!

1

73

2

Json 요청 처리

1

69

2

[건의][6장][작전1] deprecated 메소드

1

78

2

[예제][3장][작전2] windows 에서 마지막 예제

1

71

2

[오타][3장][작전1] 형 이건 빨리 해줘

2

128

2

[오타] "리스너 활용: 시스템 완전 장악 매뉴얼" 부분

1

78

1

[오타] "JobScope와 StepScope 사용 시 주의사항" 부분

1

76

2

spring boot 4 + spring batch 6 설정 변경?

1

147

2

Batch 패키지 설계 — 실무에서 Job 단위 구조

1

128

2

Spring batch를 실행해줄 스케줄러와 batch 실행 환경

1

103

1

메타테이블에 데이터가 생기지 않는 이유

1

134

2

Spring Batch 4.3.10 ExecutionContext 한글 인코딩 이슈 관련 문의

1

125

2

@StepScope 또는 @JobScope와 JobOperator

1

165

5

Remote Partitioning

1

119

2

킬구형 실무에서는 JPA ItemReader / ItemWriter를 더 선호해? 아니면 JDBC itemReader/ItemWriter를 더 선호해?

1

154

2

병렬 중첩

1

111

3

형 코드에 public static class 이게 뭐야 ?

1

150

3

ExitStatus

1

73

2