Akashic Records

Spring Batch, Excel ItemReader로 읽어서 JPA ItemWriter 쓰기 본문

Spring.io

Spring Batch, Excel ItemReader로 읽어서 JPA ItemWriter 쓰기

Andrew's Akashic Records 2023. 4. 21. 15:31
728x90

Spring Batch를 사용하여 Excel 파일을 읽어와서 JPA를 이용하여 저장하는 예제입니다. 이 예제에서는 JpaRepository를 사용하여 데이터를 저장합니다.

먼저, 엔티티 클래스와 JpaRepository 인터페이스를 생성합니다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String email;

    // 생성자, getter, setter 등
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

 

그 다음, `ExcelUserReader` 빈을 생성하여 Excel 파일에서 사용자 데이터를 읽어옵니다.

@Bean
public ItemReader<User> excelUserReader() {
    PoiItemReader<User> reader = new PoiItemReader<>();
    reader.setResource(new ClassPathResource("path/to/your/excel/file.xlsx"));
    reader.setRowMapper(userExcelRowMapper());
    return reader;
}

private RowMapper<User> userExcelRowMapper() {
    return (RowSet rs) -> {
        User user = new User();
        user.setUsername(rs.getColumnValue(0));
        user.setEmail(rs.getColumnValue(1));
        return user;
    };
}


`UserProcessor`를 생성하여 필요한 경우 데이터를 가공합니다.

public class UserProcessor implements ItemProcessor<User, User> {
    @Override
    public User process(User user) throws Exception {
        // 데이터 가공 (예: 유효성 검사, 변환 등)
        return user;
    }
}


데이터를 저장하기 위해 `UserWriter`를 생성합니다. 이 때 `UserRepository`를 사용합니다.

public class UserWriter implements ItemWriter<User> {
    private final UserRepository userRepository;

    public UserWriter(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public void write(List<? extends User> users) throws Exception {
        userRepository.saveAll(users);
    }
}


마지막으로, Spring Batch Job 설정을 완료합니다.

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
    // ... JobBuilderFactory, StepBuilderFactory, UserRepository를 주입받습니다.

    @Bean
    public Job importUserJob() {
        return jobBuilderFactory.get("importUserJob")
            .incrementer(new RunIdIncrementer())
            .flow(step1())
            .end()
            .build();
    }

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
            .<User, User>chunk(10)
            .reader(excelUserReader())
            .processor(userProcessor())
            .writer(userWriter())
            .build();
    }

    // ... ExcelUserReader, UserProcessor, UserWriter 빈 정의
}


이제 Spring Batch Job을 실행하면 Excel 파일에서 사용자 데이터를 읽어와 JPA를 사용하여 데이터베이스에 저장할 수 있습니다.

 
728x90

'Spring.io' 카테고리의 다른 글

Spring Boot Mail Starter  (0) 2023.04.25
How to run Spring Boot application unpack-jar  (0) 2023.04.25
Spring Batch DataBase 설정  (0) 2023.04.21
Spring Batch SFTP SSH ItemReader, ItemWriter  (0) 2023.04.17
Spring Boot Filter 사용법  (0) 2023.04.15
Comments