작성
·
188
0
zoneService에서 자꾸 에러가 뜨는데
아마도 zones_kr.csv문제인것같은데 해결방법이 없을까요?
답변 2
5
ClassPathResource 방식은 Jar 파일에서는 파일 경로를 찾을 수 없나봅니다. 구글링 해보니 결론은 InputStream 으로 바꿔서 해줘야한다고 하네요.
@PostConstruct
public void initZoneData() throws IOException {
if (zoneRepository.count() == 0) {
Resource resource = new ClassPathResource("zones_kr.csv");
InputStreamReader inputStreamReader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8);
BufferedReader br = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
int i = 0;
while (i < 85) {
sb.append(br.readLine());
sb.append("\n");
i++;
}
String s = sb.toString();
String[] zones = s.split("\n");
List<Zone> zoneList = Arrays.stream(zones).map(line -> {
String[] split = line.split(",");
return Zone.builder()
.city(split[0])
.localNameOfCity(split[1])
.province(split[2])
.build();
}).collect(Collectors.toList());
zoneRepository.saveAll(zoneList);
}
}
이런식으로 하니 jar에서도 잘 되긴 합니다.
원래는 while(true)로 하고 안에서 br.readLine 이 null이면 break 해주면 되는걸로 아는데, 이상하게 그렇게하면 계속 에러가 나네요.
아무튼 Jar파일에서도 실행하시려면 위처럼 하시면 될겁니다. 일단 저는 잘됩니다.
0
보통 이런 질문을 하실때는 어떤 에러인지 메시지를 보여주시면 좋겠는데요. 아마도 아래 코드 참고하시면 해결하실 수 있을 겁니다.
https://github.com/whiteship/studyolle/blob/master/src/main/java/com/studyolle/modules/zone/ZoneService.java