목록전체 글 (85)
잘 정리해보자
에러 메시지 : 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 실행..
에러 메시지 : org.springframework.dao.EmptyResultDataAccessException: Item 2 of 10 did not update any rows 발생 원인 : MyBatisBatchItemWriter 클래스로 구현 도중 read데이터 중, 10개 데이터 중에 2개는 업데이트 하지 않는 row여서 발생하는 에러. write.assertUpdates 설정은 기본으로 true 설정되어있다. assertUpdates는 chunksize 단위로 처리되는데, 데이터 중 1개의 row라도 DB에서 처리되지 않으면 Exception을 발생시킨다. 해결 : 1 row라도 write처리 안할 경우 writer.assertUpdates를 false로 설정하고 재실행. -> .assert..
에러 메시지 : PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException 발생 원인 : Spring Boot에서 @FeignClient로 https로 API 호출한 경우 발생. (인증서 등록 안함) java에서 https로 통신할 때, SSL인증서를 등록 안해서 발생했습니다. (로컬에서 발생해서 로컬JVM에 등록 예정) 해결 : 급한대로 http로 호출해서 테스트하다가, SSL인증서를 추출해 Java VM에 등록. 아래 링크를 참고해 인증서를 등록했습니다. https://www.lesstif.com/system-admin/java-validatorexception-keystore-ssl-tls-import-1..
에러 메시지 : org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 발생 원인 : 배치 실행 시, AbstractPagingItemReader 로 read구현을 했는데, read함수 안에 paging처리 하면서 다른 dao도 함께 호출해서 발생. -> paging처리 하는 reader트랜잭션이 동작중인데, 다른 mapper를 호출하면서 트랜잭션 충돌이 발생. 해결 : paging처리하는 트랜잭션안에서 동작하려면 session을 열어서 같이 처리시키던가, bean으로 따로 만들어 처리. 저는 bean으로 따로 만들어서 처리했습..
Nginx : 경량 웹 서버 (동시접속을 관리해주고, was서버 부하를 줄이게 로드밸런서 역할도 함) 504 Gateway Time-out Nginx 환경에서 Rest API 호출 시, 504 Gateway Time-out이 발생했다. (대용량 배치 실행 시, 발생했음) Nginx 설정파일에서 readtime을 확인해보니 180으로 설정되어있어서 300으로 변경 후 재시작. proxy_read_timeout : 300 (proxy_read_timeout은 기본 60초로 설정)
- Gradle 기준 Spring Boot에 Swagger 적용을 위해 build.gradle 파일에 spring-fox 3.0을 적용합니다. dependencies { ... implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' } gradle적용 후 swagger설정파일을 생성합니다. config 패키지파일 안에 설정 파일 생성. @Configuration @EnableWebMvc public class SwaggerConfig { @Bean public Docket swaggerAPI(){ //Docket : swagger Bean return new Docket(DocumentationType.O..