728x90

Back-end/spring boot 9

Webclient 외부 API 통신 - java [spring boot]

다른 spring boot 프로그램과 내 프로그램끼리 api를 사용하고 싶었는데webclient가 제일 편하다고 해서 사용했다. 다른 것도 많은데 이게 제일 코드가 적고 간편한 것 같다. gradleimplementation("org.springframework.boot:spring-boot-starter-webflux") webclient.post() - parameterimport jakarta.annotation.PostConstruct;import lombok.extern.log4j.Log4j2;import org.springframework.beans.factory.annotation.Value;import org.springframework.scheduling.annotation.Schedul..

MQTT - response topic 설정 후 publish까지 (reponse - request) [spring boot]

MQTT에서 새로 배운 기능 2번째 response topic이다. 내가 아는 mqtt는 request랑 response 기능이 있는 것은 아니다. 구현한다고 하면 만들 수는 있지만 그건 개발자가 알아서 구성할 일인데.. mqttv5에서만 가능한 걸로 알고 있다. Response topicmqtt에서 publish 시에 response topic을 지정해서 이 topic으로 응답을 해달라고 요청할 수 있다. 즉, 이 요청이 처리 성공 유무를 응답해줄 수 있다.publish (response topic 설정)import org.eclipse.paho.mqttv5.client.IMqttMessageListener;import org.eclipse.paho.mqttv5.client.MqttClient;impo..

MQTT - subscribe 시 retained data 받아오기 (how to set subscribe) [spring boot]

MQTTv5 에서는 내가 알던 기능보다 다양한 부분이 있었다. Retained Dataretained data는 mqtt에서 retained (유지한) 값을 그 topic에 맞게 저장하는 개념이다.즉, retained를 지정해서 publish를 해놓으면 그 후에 해당 topic에 subscribe를 하면 바로 마지막에 publish된 값을 받을 수 있다.gradle// https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.mqttv5.clientimplementation("org.eclipse.paho:org.eclipse.paho.mqttv5.client:1.2.5") publish// publish는.. 까먹음 // publish..

@Scheduled는 이전 작업이 끝나기 전에 다음 작업이 실행되지 않는다. (cron, fixedRate, fixedDelay든 상관없이) @Scheduled does not run the next task before the previous task completes. [spring boot]

scheduling사용하는데 같은 스케줄 작업이 동시에 실행되면 안 됐다.찾아봤는데 stackoverflow에서도 의견이 다른 느낌도 있어서 찜찜해 직접 해 확인해 봤다. @Scheduled에서는 이전 작업이 끝날 때까지 다음 작업이 진행되지 않는다.그러니깐 같은 @Scheduled 메서드에 있는 작업은 동시에 진행되지 않는다.cron이든 fixedRate나 fixedDelay를 하든 이전 작업이 끝나지 않으면 다음 작업이 진행되지 않는다.그러니 동시성 concurrentcy 문제는 신경 쓰지 않아도 된다.다만, application을 1개가 아니라 2개 이상 동시에 사용하게 된다면 같은 스케줄이 발생할 수 있다. (당연하겠지만) [ Example 예시 ]5초마다 돌아가는 스케줄 작업 → 안에 for문이..

PSQLException 예외처리 - getCause()와 getSQLState() 활용해 DB 연결, data insert 예외처리 | PSQLException exception handling - DB connection and data insertion using getCause() and getSQLState() [spring boot]

검색해도 Postgresql의 exception인 PSQLException 예외처리는 잘 안 나왔다. 그래서 PSQLException 예외 처리를 위해 getCause()랑 getSQLState()를 해봤다.  [ 전제 상황 ]jpa 말고 preparedStatement (pstmt) 사용datasource.getConnection()으로 연결 시도DB 연결을 시도 했을 때 exception 처리 부분PSQLException에서 추적한 exception은 ConnectionException 밖에 없었다.ConnectionException은 DB 서버가 꺼졌을 때 발생한다.db 사용자명, 비밀번호, 권한이 다를 때는 getCause()나 getSQLState()에서 반응하지 않아 PSQLException까..

Jpa 삭제된 데이터의 개수 확인하기 + log로 표시 | Jpa Check the number of deleted data + display as log [spring boot]

[전제 상황]jpa 사용 - 스프링 부트, 자바특정 기간보다 오래된 데이터 삭제 (각자 상황에 따라 맞춰서 변경)JpaRepository의 삭제 함수 return 타입을 int로 정의한다.void deleteByDateLessThan(삭제기간); → int deleteByDateLessThan(삭제기간);이러면 삭제한 데이터의 값이 반환된다.즉, 삭제한 데이터가 없으면 0, 있으면 1이상의 숫자가 return@Repositorypublic interface SampleRepository extends JpaRepository, JpaSpecificationExecutor { @Modifying int deleteByDateLessThan(삭제기간);} 2. if문으로 삭제된 데이터 유무 파악하..

Hikaricp에서 초기화 시 DB(Datasource) 자동 연결을 피할 수 없다. Hikaricp, automatic DB (Datasource) connection cannot be avoided during initialization. [spring boot]

영어 검색이든,, 어디든 다 뒤져보고chatGPT도 답이 없던 문제였기에 다른 사람은 고생하지 않았으면 해서 기록한다.[ 문제 상황 ]hikari Datasource를 이용해서 3개의 DB를 다루고 있다.3개 중 1개의 DB는 처음 실행 시 hikari pool에서 초기화하지 않고 필요할 때마다 연결 확인 후 이용다만, 3개다 초기에 DB 연결 시도를 하려고 함. 그러면 DB가 connect 되지 않는 상황을 exception처리하면 되지 않나?-> Hikaricp에서 자동으로 연결 시도를 하기 때문에 처음에는 모두 연결 시도를 하려고 함.-> Hikari Pool에서 발생하는 exception은 처리하기가 어려움. (할 수 있는지는 모르겠음)  나중에 연결 시도할 Datasource에 설정을 이렇게 한..

DB 연결 확인하지 않고 실행 시작 처리 & DB server가 끊기면 에러 로그 발생하고 시스템 중단되지 않도록 유지하기 / During initialization, Do not check DB connection with disconnected DB server and error log occurs, keeps the system from interrupting [spring boot]

spring boot 버전 3정도를 사용하고 있는데datasource를 굳이 hikariDatasource로 지정하지 않아도 spring boot에서 자동으로 hikariDatasource로 해준다. 그래서 HikariPool에서 DB 연결을 확인하고 연결이 잘되면 예외나 에러가 발생하지 않는다.다만, 연결하지 못하면 아예 종료가 된다는 아이러니한 상황... [ 겪었던 문제 ]DataSource로 지정 → hikaripool로 잡혀버려서 자동으로 hikaripool에서 연결 시도→ exception 발생하나 hikaripool에서 발생한 exception을 제어하는 방법이 나오지 않았다. (아마 없을 듯.)   DB 연결 확인까지 하고 시작해도 된다~ 는 사람은 필요하지 않겠지만,내 상황은 다음과 같다...

PreparedStatement에서 setInt()는 Null이 입력이 안된다. 해결 방법은? In PreparedStatement, setInt() can not insert null. Any solution?[spring boot]

어쩔 수 없이 JPA 말고 PreparedStatement를 활용해서 데이터를 입력해야 했다.data 중에는 null값이 있는데, insert를 실행하려고 했다. 문제 발생!null은 안된다고 하는 거다. 가만 보니..setString() 같은 거는 null 입력이 가능하지만,setInt()에서는 null이 불가능해서 따로 setNull()로 해야 한다. 그래서 if문을 이용해서 구분을 해야하는 번거로움이 있다.PreparedStatement pstmt = null;pstmt = conn.prepareStatement("insert into TableName (column1, column2) values(?,?)");Integer value1 = null;if(value1 != null){ pstmt.s..

728x90
반응형