먼저 나는 VSC를 사용했다.
초기에 csv 파일을 여니 한글이 다 깨져서 인코딩 설정부터 해줬어야 했다.
VSC에서 csv 파일을 열면 하단에 UTF-8이 보일 것이다.
이를 클릭한 후

Reopen with Encoding을 누른 후 EUC-KR로 설정해준 뒤 다시 창을 열어 Save with Encoding을 누르고 UTF-8로 설정해주면 한글이 깨지지 않고 그대로 저장된 것을 확인할 수 있다.
문제는 앞서 포스팅했던 내용처럼 reader, writer 다 적고 실행해도 BATCH와 관련된 테이블들이 생성되지 않았다.
혹시나
spring.batch.jdbc.initialize-schema=always
이 설정을 안해줘서 생성되지 않는건가 싶었는데... 추가해줘도 똑같았다.
그래서 수동으로 추가해주었다.
schema-mysql.sql 해당 링크에 있는 sql 파일을 저장해준다. 그리고 터미널 창에 mysql -u <username> -p 원하는데이터베이스 < path/to/schema-mysql.sql 해당 파일이 저장된 경로를 복사해서 명령어를 실행해주면 BATCH와 관련된 테이블들이 생성됐음을 확인할 수 있다.

그리고 job을 실행시키려면 @GetMapping을 통해 경로를 지정해준 뒤 JobParameters를 생성해줘야 한다.
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job csvShopJob;
@GetMapping("/main")
public String homePage() {
try {
// JobParameters를 생성합니다. 필요한 경우 추가 파라미터를 설정할 수 있습니다.
JobParameters params = new JobParametersBuilder()
.addLong("time", System.currentTimeMillis())
.toJobParameters();
// Job을 실행합니다.
jobLauncher.run(csvShopJob, params);
} catch (Exception e) {
e.printStackTrace();
// 에러 처리
}
return "form/main"; // 반환할 뷰 이름
}
스프링을 실행시켜 localhost:8080/main으로 접속하고 나면 터미널 창에서
해당 쿼리문이 나가고 job이 실행됐다는 로그를 확인할 수 있다.

그리고 BATCH_JOB_INSTANCE 테이블에서도 배치 작업이 잘 수행됐음을 확인할 수 있다.

BATCH_JOB_INSTANCE: 배치 작업 인스턴스를 저장한다.BATCH_JOB_EXECUTION: 배치 작업 실행 정보를 저장한다.BATCH_JOB_EXECUTION_PARAMS: 배치 작업 실행 시 전달된 파라미터를 저장한다.BATCH_STEP_EXECUTION: 각 스텝의 실행 정보를 저장한다.BATCH_STEP_EXECUTION_CONTEXT: 스텝 실행 시 컨텍스트 데이터를 저장한다.BATCH_JOB_EXECUTION_CONTEXT: 배치 작업 실행 시 컨텍스트 데이터를 저장한다.