메시지 수신 처리 오류 수정

cubrid db 접속 오류 수정
전송 후 SQL 처리 기능 추가
main
semin.baek 9 months ago
parent 7b639a553d
commit 865cb30cb3

@ -21,8 +21,17 @@ configurations {
repositories {
mavenCentral()
maven {
url 'https://maven.cubrid.org'
}
}
/*
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
</dependency>
*/
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
@ -34,6 +43,8 @@ dependencies {
implementation 'com.mysql:mysql-connector-j'
implementation 'com.oracle.database.jdbc:ojdbc11'
implementation 'org.mariadb.jdbc:mariadb-java-client'
implementation 'cubrid:cubrid-jdbc:11.3.0.0047'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.4'

@ -4,10 +4,34 @@
<select id="selectTtoBd10" resultType="map">
<![CDATA[
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
FROM TTO_BD
WHERE 1 = 1
AND TRANSFER_YN = 'N'
AND ROWNUM < 11
FROM (
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
, ROW_NUMBER() OVER (ORDER BY BLDG_MNG_NO) AS R_NUM
FROM TTO_BD
WHERE 1 = 1
AND TRANSFER_YN = 'N'
)
WHERE R_NUM BETWEEN 1 AND 10
]]>
</select>
<update id="updateTtoBd10TransferDone">
<![CDATA[
UPDATE TTO_BD
SET TRANSFER_YN = 'Y'
, TRANSFER_DATE = SYSDATE
WHERE 1 = 1
AND BLDG_MNG_NO IN (
SELECT BLDG_MNG_NO
FROM (
SELECT STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
, ROW_NUMBER() OVER (ORDER BY BLDG_MNG_NO) AS R_NUM
FROM TTO_BD
WHERE 1 = 1
AND TRANSFER_YN = 'N'
)
WHERE R_NUM BETWEEN 1 AND 10
)
]]>
</update>
</mapper>

@ -5,7 +5,7 @@
INSERT INTO TTO_BD (
STDG_CD, CTPV_NM, SGG_NM, STTY_EMD_NM, STLI_NM, MTN_YN, LOTNO_MNO, LOTNO_SNO, ROAD_NM_CD, ROAD_NM, UDGD_YN, BMNO, BSNO, BDRG_BLDG_NM, DTL_BLDG_NM, BLDG_MNG_NO, EMD_SN, DONG_CD, DONG_NM, ZIP, ZIP_SN, BULK_DLDTN_NM, MVMN_RSN_CD, ANCMNT_YMD, CHG_BFR_ROAD_NM_ADDR, SGG_BLDG_NM, APTCPX_YN, BSCS_ZONE_NO, DADDR_YN, RMRK1, RMRK2, TRANSFER_YN, TRANSFER_DATE
)
VALEUS (
VALUES (
#{STDG_CD}, #{CTPV_NM}, #{SGG_NM}, #{STTY_EMD_NM}, #{STLI_NM}, #{MTN_YN}, #{LOTNO_MNO}, #{LOTNO_SNO}, #{ROAD_NM_CD}, #{ROAD_NM}, #{UDGD_YN}, #{BMNO}, #{BSNO}, #{BDRG_BLDG_NM}, #{DTL_BLDG_NM}, #{BLDG_MNG_NO}, #{EMD_SN}, #{DONG_CD}, #{DONG_NM}, #{ZIP}, #{ZIP_SN}, #{BULK_DLDTN_NM}, #{MVMN_RSN_CD}, #{ANCMNT_YMD}, #{CHG_BFR_ROAD_NM_ADDR}, #{SGG_BLDG_NM}, #{APTCPX_YN}, #{BSCS_ZONE_NO}, #{DADDR_YN}, #{RMRK1}, #{RMRK2}, 'Y', SYSDATE
)
</insert>

@ -0,0 +1,40 @@
{
"description": "개발PC에서 실행함. bd-test-cubrid 와 연결. 메시지 수신 후 cubrid 저장",
"myHostId": "bd-test-cubrid",
"myListenPort": 17801,
"knownAgentList": [
{
"hostId": "bd-test-oracle",
"hostName": "mkami.foxsoft.kr",
"listenPort": 17801,
"dropBoxIdList": []
}
],
"dataSourceConfig": [
{
"dataSourceId": "cubrid",
"driverClassName": "cubrid.jdbc.driver.CUBRIDDriver",
"url": "jdbc:cubrid:14.63.185.105:33000:amif:ami::",
"username": "ami",
"password": "fox12#$%"
}
],
"sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml"
],
"dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure",
"dropBoxList": [
{
"dropBoxId": "db-bd-cubrid-save",
"taskType": "RECEIVE_DB_TO_DB_SAVE",
"dataSourceId": "cubrid",
"sqlId": "address.dropbox.cubrid.ttoBd.insertTtoBd"
}
]
},
"postman": [
]
}

@ -1,5 +1,5 @@
{
"description": "워크스테이션에서 실행함. 개발PC의 agent와 연결. 메시지 수신 후 cubrid 저장",
"description": "워크스테이션에서 실행함. bd-test-oracle 와 연결. 메시지 수신 후 cubrid 저장",
"myHostId": "bd-test-cubrid",
"myListenPort": 17801,
"knownAgentList": [

@ -0,0 +1,55 @@
{
"description": "개발PC에서 실행함. 웍스테이션 에이전트(bd-test-cubrid)와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함",
"myHostId": "bd-test-oracle",
"myListenPort": 16801,
"knownAgentList": [
{
"hostId": "bd-test-cubrid",
"hostName": "mkami.foxsoft.kr",
"listenPort": 17801,
"dropBoxIdList": [
"drop-tto-db"
]
}
],
"dataSourceConfig": [
{
"dataSourceId": "ds-oracle",
"driverClassName": "oracle.jdbc.driver.OracleDriver",
"url": "jdbc:oracle:thin:@mkami.foxsoft.kr:1521:xe",
"username": "ami",
"password": "fox12#$%"
}
],
"sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml"
],
"dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure",
"dropBoxList": [
]
},
"postman": [
{
"postmanId": "postman-oracle-tto-bd-10",
"taskType": "DB_READ_THEN_SEND",
"action": {
"type": "SCHEDULED",
"cron": "0 0/1 * * * *"
},
"message": {
"messageType": "TRANSFER_DB_TO_DB",
"dataSourceId": "ds-oracle",
"sqlId": "address.postman.oracle.ttoBd.selectTtoBd10"
},
"recipientHostId": "bd-test-cubrid",
"recipientDropBoxId": "db-bd-cubrid-save",
"routingHostIdList": [
"bd-test-oracle",
"bd-test-cubrid"
]
}
]
}

@ -1,15 +1,13 @@
{
"description": "개발PC에서 실행함. 웍스테이션 에이전트(bd-test-cubrid)와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함",
"description": "워크스테이션에서 실행함. bd-test-cubrid 와 연결. 웍스테이션 oracle 에서 TTO_BD 테이블을 조회하여 bd-test-cubrid 에이전트에게 전달함",
"myHostId": "bd-test-oracle",
"myListenPort": 16801,
"myListenPort": 17801,
"knownAgentList": [
{
"hostId": "bd-test-cubrid",
"hostName": "mkami.foxsoft.kr",
"hostName": "192.168.0.16",
"listenPort": 17801,
"dropBoxIdList": [
"drop-tto-db"
]
"dropBoxIdList": ["db-bd-cubrid-save"]
}
],
"dataSourceConfig": [
@ -22,12 +20,12 @@
}
],
"sqlMapperLocations": [
"D:/projects/bsm-lab/dfx/dfxagent/src/docs/mapper-examples/**/*.xml"
"/home/dfxagent/agent/conf/mappers/**/*.xml"
],
"dropBox": {
"receivedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/received",
"processedMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/processed",
"failureMessageStorageRoot": "D:/projects/bsm-lab/dfx/dfxagent/src/docs/messages/failure",
"receivedMessageStorageRoot": "/home/dfxagent/agent/messages/received",
"processedMessageStorageRoot": "/home/dfxagent/agent/messages/processed",
"failureMessageStorageRoot": "/home/dfxagent/agent/messages/failure",
"dropBoxList": [
]
},
@ -42,7 +40,8 @@
"message": {
"messageType": "TRANSFER_DB_TO_DB",
"dataSourceId": "ds-oracle",
"sqlId": "address.postman.oracle.ttoBd.selectTtoBd10"
"sqlId": "address.postman.oracle.ttoBd.selectTtoBd10",
"postProcessingSqlId": "address.postman.oracle.ttoBd.updateTtoBd10TransferDone"
},
"recipientHostId": "bd-test-cubrid",
"recipientDropBoxId": "db-bd-cubrid-save",

@ -78,6 +78,7 @@ public class AgentConfigDto {
private String metaDataDataSourceId;
private String metaDataSqlId;
private String metaDropBoxId;
private String postProcessingSqlId;
}
public static enum ActionType {

@ -8,11 +8,13 @@ import com.bsmlab.dfx.agent.support.exception.NullMessageException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
@Slf4j
public class MessageUtils {
private MessageUtils() {};
@ -120,13 +122,11 @@ public class MessageUtils {
if(map.get("data") == null) {
throw new InCompleteMessageException("data 엘리먼트를 찾을 수 없습니다.");
}
else if(!(map.get("data") instanceof List)) {
throw new InCompleteMessageException("data 엘리먼트의 데이터가 객체타입이 아닙니다.");
else if(!(map.get("data") instanceof String)) {
throw new InCompleteMessageException("data 엘리먼트의 데이터가 문자 타입이 아닙니다.");
}
else {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) map.get("data");
dataString = objectMapper.writeValueAsString(dataList);
dataString = String.valueOf(map.get("data"));
}
receiveMessageDto = ReceiveMessageDto.builder()
.senderHostId(senderHostId).senderTimestamp(senderTimestamp)

@ -76,7 +76,7 @@ public class DropBoxService {
}
/**
* (queue) .
* (queue) .
* @return ReceiveMessageDto serialize
*/
public String poll() {

@ -96,6 +96,10 @@ public class PostmanSchedulerService {
if(AckDto.ResultType.RECEIVE_SUCCESS != ackDto.getResult()) {
throw new DfxException(postman.getRecipientHostId() + "에게 전송하였으나 상대방이 수신하지 못하였습니다." + response);
}
else {
String postProcessingSqlId = postman.getMessage().getPostProcessingSqlId();
sqlExecuteService.update(dataSourceId, postProcessingSqlId, null);
}
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
} catch (DfxException e) {

Loading…
Cancel
Save