목록Spring/Spring Boot (15)
잘 정리해보자
spring batch에서 엑셀파일을 저장하는 기능을 구현하는데, spring boot의 extension 라이브러리에서 excel 기능을 제공하지만, git을 clone받고 사용해야 해서 폐쇄망 처럼 제한된 환경에서 구현하기 위해 apache poi로 write 하는 소스를 기록한다. (spring boot extension으로 하려는 경우 spring-boot-extension git 주소) : https://github.com/spring-projects/spring-batch-extensions GitHub - spring-projects/spring-batch-extensions: Spring Batch Extensions Spring Batch Extensions. Contribute to s..
기본 spring boot 실행하면, SQL로그는 따로 보이지 않기에, DB에 로그를 출력을 위해 설정을 잡는다. 1. gradle 에서는 build.gradle에 log4j2 설정을, maven은 pom.xml 에서 dependency 를 추가하고 refresh gradle/update maven 한다. build.gradle dependencies { ... implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' } 2. resource 파일 아래에 log4j2를 설정하는 properties 생성. log4jdbc.log4j2.properties log4jdbc.spylogdelegator.name=net.sf.log4jdbc.l..
Spring Boot 처음 실행 시, 아래와 같은 에러 발생한다. 에러 메시지 : *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class 원인 : 스프링 부트 설정 시, Application.java 파일에서 @SpringBootApplication 이 선언되있는데, 이 어노테이션에서 DB 정보..
에러 메시지 : org.springframework.batch.item.WriterNotOpenException: Writer must be open before it can be written to 원인 : ItemWriter 구현시, csv파일을 write하는 작업에서 발생한 에러. @Bean 과 @StepScope으로 ItemWriter을 구현하고 FlatFileItemWriter로 리턴하는게 원인이었다. @Bean @StepScope public ItemWriter writer() throws Exception{ BeanWrapperFieldExtractor extractor = new BeanWrapperFieldExtractor(); ... DelimitedLineAggregator lineA..
FlatFileItemReader : 파일 읽을 수 있는 클래스 간단하게 아래와 같은 3개 필드로 구성된 csv파일을 읽는 테스트를 진행한다. (infotemp.csv) id name address 1 wow seoul 2 chois incheon 3 lee seoul 시작 전에 csv파일과 매핑될 vo를 정의한다. TestCsvFieldVo.java @Getter @Setter public class TestCsvFieldVo { private int id; private String name; private String address; public TestCsvFieldVo(int id, String name, String address) { this.id = id; this.name = name; ..
에러 메시지 : TransientDataAccessResourceException : Batch Execution Errors details <Cannot change the ExecutorType when there is an existing transaction 발생 원인 : batch execution(ExecutorType.BATCH)이 동작 중인데, 중간에 mapper(ExecutorType.SIMPLE)를 호출하면서 발생. ( AbstractPagingItemReader 진행 중에 mapper 호출해서 발생했다. log를 남길 수 없는 환경에서 DB에 log insert하는 mapper를 호출하려다 트랜잭션에러 발생.) 해결 : pagingItemReader는 BATCH타입으로 실행중인데, m..
Step에서 데이터를 처리하는 방식은 Tasklet과 chunksize 가 있다. Tasklet : 데이터 처리과정이 tasklet안에서 한번에 이뤄진다. 배치 처리과정이 쉬운 경우 쉽게 사용되며, 대량처리 경우 더 복잡해질 수 있다. Chunksize : chunksize 단위로 데이터가 페이징처럼 처리된다. 대용량 데이터를 처리할때 사용되며, reader / processor / writer 로 구분되어 처리된다. (reader와 writer는 필수이며, processor는 사용안해도 된다.) - reader : (파일/DB) 데이터(item)를 읽어오며, reader안에서도 페이징처리가 가능한 bean들이 있다. ItemReader, MybatisPagingItemReader, JpaPagingIt..
Spring Boot, Gradle, Spring Batch, lombok 환경에서 시작 main application 파일에서 @EnableBatchProcessing 어노테이션으로 배치 사용을 설정한다. @EnableBatchProcessing //spring batch 사용 설정 @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //DB사용안함 public class BatchprojectApplication { public static void main(String[] args) { SpringApplication.run(BatchprojectApplication.class, args); } } 배치 테스트를 위한 job 실행..