csv파일으로 더미데이터 생성하기

2024. 11. 8. 11:42·Java & Spring/Java

- 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' 카테고리의 다른 글

Java - 비동기 처리(Thread & Runnable)  (0) 2025.03.04
HTTP 요청과 응답에 사용되는 클래스들  (0) 2025.02.06
18일차 - Java강의(쓰레드 명령어)  (0) 2024.08.07
14일차 - Java강의(쓰레드)  (0) 2024.08.01
13일차 - Java강의(예외, 제네릭)  (0) 2024.07.31
'Java & Spring/Java' 카테고리의 다른 글
  • Java - 비동기 처리(Thread & Runnable)
  • HTTP 요청과 응답에 사용되는 클래스들
  • 18일차 - Java강의(쓰레드 명령어)
  • 14일차 - Java강의(쓰레드)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 유클리드 호제법
    java
    자료구조
    프로그래머스 java 기초트레이닝
    java 에라토스테네스의 체
    java 멤버
    프로그래머스 java 기초 트레이닝
    데이터 타입
    java arrays.copyofrnage()
    개발로드맵
    데이터 크기
    java기초
    java two-pointer
    java super
    java 세수의합
    Java this
    Java 생성자
    java enhance switch
    java 제어자
    java 메서드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
csv파일으로 더미데이터 생성하기
상단으로

티스토리툴바