728x90

springboot 8

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..

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..

failed to manage transaction 구문 오류 “column명” [spring boot, sql]

다른 사람도 헤맬까봐  올리는 글.. [ 문제 상황 ]spring boot에서PreparedStatement의 sql문을 이용해서 insert문 실행'failed to manage transaction 구문 오류 “column명”'라는 예외 발생하지만, column명이 틀린 것도 다른 문제도 없었다.[ 문제 확인 방법 ]먼저 sql문 실행 시 구문 오류가 남 → sql문을 따로 실행해본다. (heidisql 사용)여기서도 “column명”에서 문제 발생 → 이거 sql 예약어인가?결국에 맞았음.. 예약어였다. → 그러면 이름 바꾸거나 아니면 예약어 표시를 해야 함 나는 예약어 이름의 column을 사용해야 해서 표시하는 걸로 선택. [ 문제 해결 방법 ]\"칼럼명\" 을 이용해서 예약어 표시를 없앤다.`..

Database/SQL 2024.07.23
728x90
반응형