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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바