프로젝트 진행중 csv를 파싱할 일이 생겨 파싱해서 DB에 저장하는 코드를 작성했는데 기록하기 위해서 남긴다.
예시 데이터
name,bigtype,material,description,url
쌀밥,한식,쌀,"1. 밥솥에 쌀을 씻어 깨끗하게 세척한다.
2. 물과 쌀의 비율은 1:12 정도로 설정하여 밥솥에 넣는다.
3. 밥솥을 뚜껑으로 덮고, ""취사"" 모드로 설정하여 밥을 짓는다.
4. 밥이 다 익으면, 약 10분 정도 지난 후에 조금씩 저어가며 식힌다.
5. 완성된 흰쌀밥을 그릇에 담아 맛있게 즐긴다.",imageurl
@RequiredArgsConstructor
@RestController
public class TestJobController {
private final RecipeRepository recipeRepository;
private final RecipeSequenceRepository recipeSequenceRepository;
@Transactional
@GetMapping("/data")
public String saveData() throws IOException {
try (CSVReader reader = new CSVReader(new FileReader("src/main/resources/메뉴AWS링크포함.csv"))) {
String[] nextLine;
reader.skip(1);
while ((nextLine = reader.readNext()) != null) {
int j = 0;
int k = 1;
Recipe recipe = Recipe.builder()
.foodImageUrl(nextLine[4])
.name(nextLine[0])
.material(nextLine[2])
.category(nextLine[1])
.build();
recipeRepository.save(recipe);
String[] data = nextLine[3].split("\\\\.");
for (int i = 0; i < data.length; i++) {
if (j >= data.length || k >= data.length) {
break;
}
String sequence = data[j];
String content = data[k];
j += 2;
k += 2;
recipeSequenceRepository.save(
RecipeSequence.builder()
.sequence(Integer.parseInt(sequence.trim()))
.content(content.trim())
.recipe(recipe)
.build()
);
}
}
} catch (CsvValidationException e) {
throw new RuntimeException(e);
}
return "success";
}
}