Java
-
[Spring/Spring Boot] request timeout error / Fill pool skipped, pool is at sufficient level.Java/Trouble Shooting 2022. 7. 28. 10:40
오류내용 org.springframework.dao.DataAccessResourceFailureException: could not extract ResultSet; nested exception is org.hibernate.exception.JDBCConnectionException: could not extract ResultSet at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:275) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(..
-
[Spring/Java] JDBC? DataSource? HikariDataSource? HikariCP?Java/Spring 2022. 6. 15. 16:18
JDBC란 JDBC(Java Database Connectivity)는 Java에서 DB에 접근할 수 있도록 하는 Java API다. JDBC는 DB에서 데이터를 읽어오거나 업데이트 하는 방법을 제공한다. Connection conn = null; try{ Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/test"; conn = DriverManager.getConnection(url, "username", "password"); }catch(Exception e){ ... }finally{ conn.close(); } JDBC Driver란 JDBC Driver는 Java 응용 프로그램이 DB와 상호 작용할 수 있..
-
RxJava란?Java/RxJava 2022. 5. 25. 10:17
Rx : Reactive Extention RxJava는 자바와 안드로이드를 위한 리액티브 프로그래밍 구현체로서 함수형 프로그래밍의 영향을 받았다. 리액티브 익스텐션(일반적으로는 Rx, 구체적으로는 RxJava)이 함수형 프로그래밍의 영향을 받았다고 해서 '함수형 리액트 프로그래밍'은 아님 '리액티브 프로그래밍'이란 데이터나 이벤트 변화의 반응에 초점을 맞춘 프로그래밍을 뜻하는 일반적인 용어 리액티브 함수형 프로그래밍이란 프로그래밍에 대한 하나의 접근 방식, 즉 명령형 시스템상의 추상화임 동시성과 병렬성을 해결한다 쉽게 말하자면? 콜백지옥에서 벗어나는 것 언제 리액티브 프로그래밍이 필요한가 마우스 움직임이나 클릭, 키보드 타이핑, GPS 신호, 자이로스코프 신호, 터치 이벤트 등을 처리할 때 (요청이 시..
-
[Spring Batch] 에러처리(레코드 건너뛰기, 잘못된 레코드 로그 남기기, 입력이 없을 때의 처리)Java/Spring Batch 2021. 8. 10. 08:13
스프링 배치 애플리케이션에서 시작할 때와 처리 중에 또는 결과를 기록할 때 문제가 발생할 수 있다. 배치 처리 중에 발생하는 여러 가지 에러를 다루는 방법을 살펴보자. 레코드 건너뛰기 입력에서 레코드를 읽는 중에 에러가 발생했을 때는 몇 가지 다른 선택지가 존재한다. 먼저 예외를 던져 처리를 멈추는 것이다. 얼마나 많은 레코드를 처리해야 하는가와 에러가 발생한 레코드 한 개를 처리하지 않았을 때의 영향도에 따라 에러를 던져 처리를 멈추는 것은 극단적인 방버일 수 있다. 스프랭 배치는 그 대신 특정 예외가 발생했을 때 레코드를 건너뛰는 skip 기능을 제공한다. 레코드를 건너뛸지 여부를 결정할 때 고려해야 할 두 가지 요소가 있다. 먼저 어떤 조건에서 레코드를 건너뛸 것인가, 특히 어떤 예외를 무시할 것인..
-
[Java] 날짜 다루기 (Date, Calendar, SimpleDateFormat)Java 2021. 7. 25. 10:36
Calendar → Date Calendar cal = Calendar.getInstance(); cal.set(2021, 07, 24); Date startDate = cal.getTime(); cal.set(2021, 07, 25); Date endDate = cal.getTime(); DateFormat df = new SimpleDateFormat("yyyy/MM/dd"); Date d = df.parse("2021/08/14"); 오늘 날짜 원하는 데이터 형식으로 변환 SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss"); String dateStr = sdf.format(new Date());
-
[Spring Batch] ItemReader(4) - 기존서비스Java/Spring Batch 2021. 6. 13. 09:54
기존서비스 대부분의 회사에는 현재 서비스 중인 웹 또는 다른 형태의 자바 애플리케이션이 존재한다. 이들 애플리케이션은 수많은 분석, 설계, 테스트, 버그 수정 과정을 거쳤다. 이런 애플리케이션을 구성하는 코드는 실전에서 테스트됐으며 이상이 없음이 검증됐다. 그럼 배치 처리에서 기존 애플리케이션의 코드를 사용할 수는 없을까? 고객 객체를 읽어들이는 배치 처리 예제를 생각해보자. 다만 지금까지의 예제처럼 Customer 객체의 매핑 대상이 단일 테이블이나 파일이 아니라 여러 데이터베이스의 여러 테이블에 산재돼 있다고 가정한다. 또한 물리적으로 고객 데이터를 지우지 않는다. 그 대신 삭제됐다는 플래그를 기록한다. 웹 기반 애플리케이션에는 이미 고객 데이터를 조회하는 서비스가 존재한다. 배치 처리에서 해당 서비..
-
[Spring Batch] ItemReader(3) - 저장프로시저(SP, Stored Procedure)Java/Spring Batch 2021. 5. 31. 08:44
저장 프로시저란 무엇일까? 특정 유형의 클라이언트가 향후 수행할 수 있도록 데이터베이스에 저장한 해당 데이터베이스 전용 코드의 집합을 말한다. 모든 데이터베이스가 저장프로시저를 지원하진 않지만 대부분의 상용 등급 관계형 데이터베이스에서 사용이 가능하다. 대다수의 엔터프라이즈 환경에서 관계형 데이터베이스는 데이터가 저장된 테이블이 있는 단순한 공간만이 아니다. 관계형 데이터베이스는 온갖 비즈니스 목적에 맞춰 사용되는 복잡한 저장 프로시저가 포함된 코드의 생태계다. 저장 프로시저는 일반적인 자바 개발자에게는 데이터베이스로 작업을 할때 접하기에 가장 먼 메커니즘이지만, 전 세계의 다양한 데이터베이스에서 찾을 수 있는 잘 정립된 도구다. 스프링 배치가 저장 프로시저에서 데이터를 조회하는 용도로 제공하는 Stor..
-
[Spring Batch] ItemReader(2) - JPAJava/Spring Batch 2021. 5. 30. 20:24
JPA 또는 자바 퍼시스턴스 API는 ORM 영역에서 표준화된 접근법을 제공한다. JPA는 아이템을 조회하는 데 커서 기반 방법은 제공하지 않는다. 스프링 부트가 제공하는 대부분의 기능을 사용할 때 그러하듯, 실제로 스프링 부트를 사용해서 JPA를 구성하는 것은 매우 쉽다. JPA를 사용하는 예제에서 신경 써야 할 부분은 개발하는 ItemReader를 구성하는 것이다. 앞서 언급했듯 JPA는 커서 기법의 데이터베이스 접근을 지원하지 않지만 페이징 기법의 데이터베이스 접근은 지원한다. ItemReader로는 org.springframework.batch.item.database.JpaPagingItemRader를 사용하는데, 해당 리더에는 네 개의 의존성이 필요하다. 필요한 의존성은 ExecutionCo..