- build.gradle
implementation 'com.opencsv:opencsv:5.6'
- 전체 코드
package com.play.hiclear.domain.gym.service;
import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvValidationException;
import com.play.hiclear.common.enums.Ranks;
import com.play.hiclear.domain.gym.entity.Gym;
import com.play.hiclear.domain.gym.enums.GymType;
import com.play.hiclear.domain.gym.repository.GymRepository;
import com.play.hiclear.domain.user.entity.User;
import com.play.hiclear.domain.user.enums.UserRole;
import com.play.hiclear.domain.user.repository.UserRepository;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
@Service
@RequiredArgsConstructor
public class GymDummyDataService {
private final GymRepository gymRepository;
private final UserRepository userRepository;
@PostConstruct
@Transactional
public void generateDummyData() {
// 데이터베이스에 더미 데이터가 이미 존재하면 생성하지 않음
if (gymRepository.count() > 0) {
System.out.println("더미 데이터가 이미 존재합니다.");
return;
}
//더미 데이터 생성
User user = new User("이름", "adjwws@anasdaw.com", "서울 중구 태평로1가 31", "서울 중구 세종대로 110", 37.5663174209601, 126.977829174031, "encodedPassword", Ranks.RANK_A, UserRole.BUSINESS);
userRepository.save(user);
String csvFile = "src/main/resources/data/address_dummy.csv";
int i = 0;
try (CSVReader reader = new CSVReader(new InputStreamReader(new FileInputStream(csvFile)))) {
String[] nextLine;
reader.readNext();
while ((nextLine = reader.readNext()) != null && i < 22000) {
// CSV 파일의 각 열을 Gym 객체의 필드에 맞게 매핑
String name = nextLine[0] + nextLine[1] + nextLine[2];
String regionAddress = nextLine[0] + " " + nextLine[1] + " " + nextLine[2];
Double latitude = Double.parseDouble(nextLine[3]);
Double longitude = Double.parseDouble(nextLine[4]);
// Gym 객체 생성 후 저장
Gym gym = new Gym(name, null, regionAddress, null, latitude, longitude, GymType.PUBLIC, user);
gymRepository.save(gym);
if (i % 100 == 0) {
gymRepository.flush();
}
i++;
}
} catch (IOException | CsvValidationException e) {
e.printStackTrace();
}
}
}
- csv구성
시도 ,시군구 ,읍면동 ,위도 ,경도
서울특별시,종로구,청운효자동,37.584009,126.970626
서울특별시,종로구,사직동,37.575408,126.965944
서울특별시,종로구,삼청동,37.590758,126.980996
※ 체육관 더미 객체를 생성하는 서비스로 체육관은 주소, 위도, 경도, 유저(체육관 생성자)가 필요하다.
- @PostContruct : 빈이 생성된 후, 의존성 주입이 완료된 직후에 자동으로 호출
- if문을 통해 DB에 객체가 있으면 미실행
- User 객체 생성
- CSVReader을 통해 csv파일을 읽음
- 첫줄은 header값으로 .readNext()로 넘김
- 100개마다 flush
'Java & Spring > Java' 카테고리의 다른 글
18일차 - Java강의(쓰레드 명령어) (0) | 2024.08.07 |
---|---|
14일차 - Java강의(쓰레드) (0) | 2024.08.01 |
13일차 - Java강의(예외, 제네릭) (0) | 2024.07.31 |
11일차 - Java강의(계산기 실습, 클래스화, 추상화) (0) | 2024.07.29 |
10일차 - Java강의(제어자, package, import, 상속, this, super) (0) | 2024.07.26 |