테이블 검증조건 수정, 클라이언트 종료조건, 로깅관련 수정
@c38fbfa1ffe509562e967c72d550178f6457603e
--- build.gradle
+++ build.gradle
... | ... | @@ -47,7 +47,7 @@ |
| 47 | 47 |
// https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2 |
| 48 | 48 |
implementation 'org.apache.commons:commons-configuration2:2.10.1' |
| 49 | 49 |
// https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client |
| 50 |
- implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.4.1' |
|
| 50 |
+ implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.1.4' |
|
| 51 | 51 |
// https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11 |
| 52 | 52 |
implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '23.5.0.24.07' |
| 53 | 53 |
// https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc |
--- src/main/java/com/munjaon/client/config/DataSourceConfig.java
+++ src/main/java/com/munjaon/client/config/DataSourceConfig.java
... | ... | @@ -1,5 +1,6 @@ |
| 1 | 1 |
package com.munjaon.client.config; |
| 2 | 2 |
|
| 3 |
+import com.zaxxer.hikari.HikariConfig; |
|
| 3 | 4 |
import com.zaxxer.hikari.HikariDataSource; |
| 4 | 5 |
import lombok.RequiredArgsConstructor; |
| 5 | 6 |
import lombok.extern.slf4j.Slf4j; |
... | ... | @@ -39,14 +40,38 @@ |
| 39 | 40 |
System.out.println("MARIADB.URL : " + serverConfig.getString(dbms + ".URL"));
|
| 40 | 41 |
System.out.println("MARIADB.USER : " + serverConfig.getString(dbms + ".USER"));
|
| 41 | 42 |
System.out.println("MARIADB.PASSWORD : " + serverConfig.getString(dbms + ".PASSWORD"));
|
| 42 |
- return DataSourceBuilder.create().type(HikariDataSource.class) |
|
| 43 |
- .driverClassName(serverConfig.getString(dbms + ".DRIVER")) |
|
| 44 |
- .url(serverConfig.getString(dbms + ".URL")) |
|
| 45 |
- .username(serverConfig.getString(dbms + ".USER")) |
|
| 46 |
- .password(serverConfig.getString(dbms + ".PASSWORD")) |
|
| 47 |
- .build(); |
|
| 43 |
+ |
|
| 44 |
+ HikariConfig hikariConfig = new HikariConfig(); |
|
| 45 |
+ hikariConfig.setDriverClassName(serverConfig.getString(dbms + ".DRIVER")); |
|
| 46 |
+ hikariConfig.setJdbcUrl(serverConfig.getString(dbms + ".URL")); |
|
| 47 |
+ hikariConfig.setUsername(serverConfig.getString(dbms + ".USER")); |
|
| 48 |
+ hikariConfig.setPassword(serverConfig.getString(dbms + ".PASSWORD")); |
|
| 49 |
+ hikariConfig.setMaximumPoolSize(10); |
|
| 50 |
+ if ("ORACLE".equalsIgnoreCase(dbms) || "TIBERO".equalsIgnoreCase(dbms)) {
|
|
| 51 |
+ hikariConfig.setConnectionTestQuery("SELECT 1 FROM DUAL");
|
|
| 52 |
+ } else {
|
|
| 53 |
+ hikariConfig.setConnectionTestQuery("SELECT 1");
|
|
| 54 |
+ } |
|
| 55 |
+ |
|
| 56 |
+ return new HikariDataSource(hikariConfig); |
|
| 48 | 57 |
} |
| 49 | 58 |
|
| 59 |
+// @Primary |
|
| 60 |
+// @Bean(name = "datasource") |
|
| 61 |
+// public DataSource dataSource() throws ConfigurationException {
|
|
| 62 |
+// String dbms = serverConfig.getString("DB.DBMS");
|
|
| 63 |
+// System.out.println("MARIADB.DRIVER : " + serverConfig.getString(dbms + ".DRIVER"));
|
|
| 64 |
+// System.out.println("MARIADB.URL : " + serverConfig.getString(dbms + ".URL"));
|
|
| 65 |
+// System.out.println("MARIADB.USER : " + serverConfig.getString(dbms + ".USER"));
|
|
| 66 |
+// System.out.println("MARIADB.PASSWORD : " + serverConfig.getString(dbms + ".PASSWORD"));
|
|
| 67 |
+// return DataSourceBuilder.create().type(HikariDataSource.class) |
|
| 68 |
+// .driverClassName(serverConfig.getString(dbms + ".DRIVER")) |
|
| 69 |
+// .url(serverConfig.getString(dbms + ".URL")) |
|
| 70 |
+// .username(serverConfig.getString(dbms + ".USER")) |
|
| 71 |
+// .password(serverConfig.getString(dbms + ".PASSWORD")) |
|
| 72 |
+// .build(); |
|
| 73 |
+// } |
|
| 74 |
+ |
|
| 50 | 75 |
@Primary |
| 51 | 76 |
@Bean(name = "factory") |
| 52 | 77 |
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
|
--- src/main/java/com/munjaon/client/cubrid/service/CubridService.java
+++ src/main/java/com/munjaon/client/cubrid/service/CubridService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
+++ src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/mssql/service/MssqlService.java
+++ src/main/java/com/munjaon/client/mssql/service/MssqlService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/mysql/service/MysqlService.java
+++ src/main/java/com/munjaon/client/mysql/service/MysqlService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/oracle/service/OracleService.java
+++ src/main/java/com/munjaon/client/oracle/service/OracleService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
+++ src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
... | ... | @@ -20,7 +20,7 @@ |
| 20 | 20 |
try {
|
| 21 | 21 |
int msgCount = deliverBMapper.checkTableForMessage(); |
| 22 | 22 |
int logCount = deliverBMapper.checkTableForLog(); |
| 23 |
- if (msgCount >= 0 && logCount >= 0) {
|
|
| 23 |
+ if (msgCount > 0 && logCount > 0) {
|
|
| 24 | 24 |
isExist = true; |
| 25 | 25 |
} |
| 26 | 26 |
} catch (Exception e) {
|
--- src/main/java/com/munjaon/client/server/packet/Packet.java
+++ src/main/java/com/munjaon/client/server/packet/Packet.java
... | ... | @@ -5,6 +5,10 @@ |
| 5 | 5 |
public final class Packet {
|
| 6 | 6 |
public static final byte SET_DEFAULT_BYTE = (byte) 0x00; |
| 7 | 7 |
public static final long LINK_CHECK_CYCLE = 10000L; |
| 8 |
+ /* 패킷 만료 시간 체크 */ |
|
| 9 |
+ public static final long LIMIT_PACKET_TIMEOUT = 25000L; |
|
| 10 |
+ /* 패킷을 보내고 수신시까지 타임아웃 체크시간 */ |
|
| 11 |
+ public static final long LIMIT_PACKET_SEND_TIMEOUT = 30000L; |
|
| 8 | 12 |
// public static final long LINK_CHECK_CYCLE = 30000L; |
| 9 | 13 |
|
| 10 | 14 |
public static void setDefaultByte(ByteBuffer buffer) {
|
--- src/main/java/com/munjaon/client/server/service/CollectClientService.java
+++ src/main/java/com/munjaon/client/server/service/CollectClientService.java
... | ... | @@ -80,12 +80,19 @@ |
| 80 | 80 |
} |
| 81 | 81 |
} |
| 82 | 82 |
|
| 83 |
+ private boolean checkTimeOut() {
|
|
| 84 |
+ return System.currentTimeMillis() - lastPacketSendTime >= Packet.LIMIT_PACKET_TIMEOUT; |
|
| 85 |
+ } |
|
| 86 |
+ |
|
| 83 | 87 |
@Override |
| 84 | 88 |
public void doService() {
|
| 85 | 89 |
bind(); |
| 86 | 90 |
while (isRun()) {
|
| 87 | 91 |
try {
|
| 88 |
-// saveSystemLog("Root Path : " + System.getProperty("ROOTPATH"));
|
|
| 92 |
+ if (checkTimeOut()) {
|
|
| 93 |
+ saveSystemLog("[checkTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 94 |
+ break; |
|
| 95 |
+ }; |
|
| 89 | 96 |
messageService(); |
| 90 | 97 |
linkCheckService(); |
| 91 | 98 |
} catch (Exception e) {
|
... | ... | @@ -103,7 +110,12 @@ |
| 103 | 110 |
try {
|
| 104 | 111 |
saveSystemLog("[BIND REQUEST] [IP : " + this.address + "] [PORT : " + this.port + "] [ID : " + this.id + "]");
|
| 105 | 112 |
socketChannel.write(sendBuffer); |
| 113 |
+ long BIND_SEND_TIME = System.currentTimeMillis(); |
|
| 106 | 114 |
while (true) {
|
| 115 |
+ if (System.currentTimeMillis() - BIND_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 116 |
+ saveSystemLog("[bindTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 117 |
+ throw new RuntimeException("bindTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 118 |
+ } |
|
| 107 | 119 |
int recvCount = socketChannel.read(recvBuffer); |
| 108 | 120 |
if (recvCount == -1) {
|
| 109 | 121 |
saveSystemLog("[BIND ERROR] [CONNECTION CLOSED]");
|
... | ... | @@ -172,17 +184,24 @@ |
| 172 | 184 |
return; |
| 173 | 185 |
} |
| 174 | 186 |
|
| 175 |
- for (MunjaonMsg data : list) {
|
|
| 176 |
- switch (this.serviceType) {
|
|
| 177 |
- case "SMS": smsMessageService(data); break; |
|
| 178 |
- case "LMS": lmsMessageService(data); break; |
|
| 179 |
- case "MMS": mmsMessageService(data); break; |
|
| 180 |
- case "KAT": katMessageService(data); break; |
|
| 181 |
- case "KFT": kftMessageService(data); break; |
|
| 182 |
- default:break; |
|
| 187 |
+ try {
|
|
| 188 |
+ for (MunjaonMsg data : list) {
|
|
| 189 |
+ switch (this.serviceType) {
|
|
| 190 |
+ case "SMS": smsMessageService(data); break; |
|
| 191 |
+ case "LMS": lmsMessageService(data); break; |
|
| 192 |
+ case "MMS": mmsMessageService(data); break; |
|
| 193 |
+ case "KAT": katMessageService(data); break; |
|
| 194 |
+ case "KFT": kftMessageService(data); break; |
|
| 195 |
+ default:break; |
|
| 196 |
+ } |
|
| 183 | 197 |
} |
| 198 |
+ } catch (Exception e) {
|
|
| 199 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 200 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 201 |
+ saveSystemLog(e.toString()); |
|
| 184 | 202 |
} |
| 185 |
- if (this.deliverList != null && this.deliverList.size() > 0) {
|
|
| 203 |
+ |
|
| 204 |
+ if (this.deliverList != null && !this.deliverList.isEmpty()) {
|
|
| 186 | 205 |
worker.updateDeliverForList(this.deliverList); |
| 187 | 206 |
this.deliverList = null; // NULL로 초기화 |
| 188 | 207 |
} |
... | ... | @@ -218,7 +237,12 @@ |
| 218 | 237 |
saveSystemLog("[MESSAGE SEND] [... ...]");
|
| 219 | 238 |
saveSystemLog("[MESSAGE DATA : " + data.toString() + "]");
|
| 220 | 239 |
socketChannel.write(sendBuffer); |
| 240 |
+ long MSG_SEND_TIME = System.currentTimeMillis(); |
|
| 221 | 241 |
while (true) {
|
| 242 |
+ if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 243 |
+ saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 244 |
+ throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 245 |
+ } |
|
| 222 | 246 |
int recvCount = socketChannel.read(recvBuffer); |
| 223 | 247 |
if (recvCount == -1) {
|
| 224 | 248 |
saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
|
... | ... | @@ -232,8 +256,10 @@ |
| 232 | 256 |
} |
| 233 | 257 |
} |
| 234 | 258 |
} catch (IOException e) {
|
| 235 |
- e.printStackTrace(); |
|
| 236 |
-// throw new RuntimeException(e); |
|
| 259 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 260 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 261 |
+ saveSystemLog(e.toString()); |
|
| 262 |
+ throw new RuntimeException(e); |
|
| 237 | 263 |
} |
| 238 | 264 |
} |
| 239 | 265 |
|
... | ... | @@ -267,27 +293,44 @@ |
| 267 | 293 |
saveSystemLog("[MESSAGE SEND] [... ...]");
|
| 268 | 294 |
saveSystemLog("[MESSAGE DATA : " + data.toString() + "]");
|
| 269 | 295 |
socketChannel.write(sendBuffer); |
| 296 |
+ long MSG_SEND_TIME = System.currentTimeMillis(); |
|
| 270 | 297 |
while (true) {
|
| 298 |
+ if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 299 |
+ saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 300 |
+ throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 301 |
+ } |
|
| 271 | 302 |
int recvCount = socketChannel.read(recvBuffer); |
| 272 | 303 |
if (recvCount == -1) {
|
| 273 | 304 |
saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
|
| 274 | 305 |
throw new RuntimeException("DELIVER ERROR");
|
| 275 | 306 |
} else if (recvCount > 0) {
|
| 276 |
- worker.updateToDeliver(data.getMsgId()); |
|
| 307 |
+ setDeliverMsgId(data.getMsgId()); |
|
| 308 |
+// worker.updateToDeliver(data.getMsgId()); |
|
| 277 | 309 |
saveSystemLog("[MESSAGE SEND] [SUCCESS]");
|
| 278 | 310 |
lastPacketSendTime = System.currentTimeMillis(); |
| 279 | 311 |
break; |
| 280 | 312 |
} |
| 281 | 313 |
} |
| 282 | 314 |
} catch (IOException e) {
|
| 315 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 316 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 317 |
+ saveSystemLog(e.toString()); |
|
| 283 | 318 |
throw new RuntimeException(e); |
| 284 | 319 |
} |
| 285 | 320 |
} |
| 286 | 321 |
|
| 287 | 322 |
private void mmsMessageService(MunjaonMsg data) {
|
| 288 | 323 |
try {
|
| 324 |
+ /* 이미지 경로 디폴트 경로 사용 여부 */ |
|
| 325 |
+ String defaultYn = getProp("MMS", "DEFAULT_PATH_YN");
|
|
| 289 | 326 |
/* MMS Image 저장 경로 */ |
| 290 |
- String path = System.getProperty("ROOTPATH") + File.separator + "mmsfile" + File.separator;
|
|
| 327 |
+ String path = null; |
|
| 328 |
+ if ("Y".equals(defaultYn)) {
|
|
| 329 |
+ path = System.getProperty("ROOTPATH") + File.separator + "mmsfile" + File.separator;
|
|
| 330 |
+ } else {
|
|
| 331 |
+ path = getProp("MMS", "FILEPATH") + File.separator;
|
|
| 332 |
+ } |
|
| 333 |
+ |
|
| 291 | 334 |
/* 공통 메시지 유효성 체크 */ |
| 292 | 335 |
int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data); |
| 293 | 336 |
int checkMsgCode = MessageCheckUtil.validateMessageForMedia(data); |
... | ... | @@ -363,29 +406,43 @@ |
| 363 | 406 |
} |
| 364 | 407 |
|
| 365 | 408 |
socketChannel.write(byteBuffers); |
| 366 |
- |
|
| 409 |
+ long MSG_SEND_TIME = System.currentTimeMillis(); |
|
| 367 | 410 |
while (true) {
|
| 411 |
+ if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 412 |
+ saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 413 |
+ throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 414 |
+ } |
|
| 368 | 415 |
int recvCount = socketChannel.read(recvBuffer); |
| 369 | 416 |
if (recvCount == -1) {
|
| 370 | 417 |
saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
|
| 371 | 418 |
throw new RuntimeException("DELIVER ERROR");
|
| 372 | 419 |
} else if (recvCount > 0) {
|
| 373 |
- worker.updateToDeliver(data.getMsgId()); |
|
| 420 |
+ setDeliverMsgId(data.getMsgId()); |
|
| 421 |
+// worker.updateToDeliver(data.getMsgId()); |
|
| 374 | 422 |
saveSystemLog("[MESSAGE SEND] [SUCCESS]");
|
| 375 | 423 |
lastPacketSendTime = System.currentTimeMillis(); |
| 376 | 424 |
break; |
| 377 | 425 |
} |
| 378 | 426 |
} |
| 379 | 427 |
} catch (IOException e) {
|
| 380 |
- e.printStackTrace(); |
|
| 428 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 429 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 430 |
+ saveSystemLog(e.toString()); |
|
| 381 | 431 |
throw new RuntimeException(e); |
| 382 | 432 |
} |
| 383 | 433 |
} |
| 384 | 434 |
|
| 385 | 435 |
private void katMessageService(MunjaonMsg data) {
|
| 386 | 436 |
try {
|
| 437 |
+ /* 이미지 경로 디폴트 경로 사용 여부 */ |
|
| 438 |
+ String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
|
|
| 387 | 439 |
/* Kakao Json 저장 경로 */ |
| 388 |
- String path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
|
|
| 440 |
+ String path = null; |
|
| 441 |
+ if ("Y".equals(defaultYn)) {
|
|
| 442 |
+ path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
|
|
| 443 |
+ } else {
|
|
| 444 |
+ path = getProp("KAKAO", "FILEPATH") + File.separator;
|
|
| 445 |
+ } |
|
| 389 | 446 |
/* 공통 메시지 유효성 체크 */ |
| 390 | 447 |
int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data); |
| 391 | 448 |
int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data); |
... | ... | @@ -426,29 +483,43 @@ |
| 426 | 483 |
byteBuffers[1] = fileBuffer; |
| 427 | 484 |
|
| 428 | 485 |
socketChannel.write(byteBuffers); |
| 429 |
- |
|
| 486 |
+ long MSG_SEND_TIME = System.currentTimeMillis(); |
|
| 430 | 487 |
while (true) {
|
| 488 |
+ if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 489 |
+ saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 490 |
+ throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 491 |
+ } |
|
| 431 | 492 |
int recvCount = socketChannel.read(recvBuffer); |
| 432 | 493 |
if (recvCount == -1) {
|
| 433 | 494 |
saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
|
| 434 | 495 |
throw new RuntimeException("DELIVER ERROR");
|
| 435 | 496 |
} else if (recvCount > 0) {
|
| 436 |
- worker.updateToDeliver(data.getMsgId()); |
|
| 497 |
+ setDeliverMsgId(data.getMsgId()); |
|
| 498 |
+// worker.updateToDeliver(data.getMsgId()); |
|
| 437 | 499 |
saveSystemLog("[MESSAGE SEND] [SUCCESS]");
|
| 438 | 500 |
lastPacketSendTime = System.currentTimeMillis(); |
| 439 | 501 |
break; |
| 440 | 502 |
} |
| 441 | 503 |
} |
| 442 | 504 |
} catch (IOException e) {
|
| 443 |
- e.printStackTrace(); |
|
| 505 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 506 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 507 |
+ saveSystemLog(e.toString()); |
|
| 444 | 508 |
throw new RuntimeException(e); |
| 445 | 509 |
} |
| 446 | 510 |
} |
| 447 | 511 |
|
| 448 | 512 |
private void kftMessageService(MunjaonMsg data) {
|
| 449 | 513 |
try {
|
| 514 |
+ /* 이미지 경로 디폴트 경로 사용 여부 */ |
|
| 515 |
+ String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
|
|
| 450 | 516 |
/* Kakao Json 저장 경로 */ |
| 451 |
- String path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
|
|
| 517 |
+ String path = null; |
|
| 518 |
+ if ("Y".equals(defaultYn)) {
|
|
| 519 |
+ path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
|
|
| 520 |
+ } else {
|
|
| 521 |
+ path = getProp("KAKAO", "FILEPATH") + File.separator;
|
|
| 522 |
+ } |
|
| 452 | 523 |
/* 공통 메시지 유효성 체크 */ |
| 453 | 524 |
int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data); |
| 454 | 525 |
int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data); |
... | ... | @@ -488,21 +559,28 @@ |
| 488 | 559 |
byteBuffers[1] = fileBuffer; |
| 489 | 560 |
|
| 490 | 561 |
socketChannel.write(byteBuffers); |
| 491 |
- |
|
| 562 |
+ long MSG_SEND_TIME = System.currentTimeMillis(); |
|
| 492 | 563 |
while (true) {
|
| 564 |
+ if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 565 |
+ saveSystemLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 566 |
+ throw new RuntimeException("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 567 |
+ } |
|
| 493 | 568 |
int recvCount = socketChannel.read(recvBuffer); |
| 494 | 569 |
if (recvCount == -1) {
|
| 495 | 570 |
saveSystemLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
|
| 496 | 571 |
throw new RuntimeException("DELIVER ERROR");
|
| 497 | 572 |
} else if (recvCount > 0) {
|
| 498 |
- worker.updateToDeliver(data.getMsgId()); |
|
| 573 |
+ setDeliverMsgId(data.getMsgId()); |
|
| 574 |
+// worker.updateToDeliver(data.getMsgId()); |
|
| 499 | 575 |
saveSystemLog("[MESSAGE SEND] [SUCCESS]");
|
| 500 | 576 |
lastPacketSendTime = System.currentTimeMillis(); |
| 501 | 577 |
break; |
| 502 | 578 |
} |
| 503 | 579 |
} |
| 504 | 580 |
} catch (IOException e) {
|
| 505 |
- e.printStackTrace(); |
|
| 581 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 582 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 583 |
+ saveSystemLog(e.toString()); |
|
| 506 | 584 |
throw new RuntimeException(e); |
| 507 | 585 |
} |
| 508 | 586 |
} |
... | ... | @@ -517,7 +595,12 @@ |
| 517 | 595 |
try {
|
| 518 | 596 |
saveSystemLog("[LINK_CHECK SEND] [... ...]");
|
| 519 | 597 |
socketChannel.write(LinkCheck.makeLinkCheckBuffer()); |
| 598 |
+ long LINK_SEND_TIME = System.currentTimeMillis(); |
|
| 520 | 599 |
while (true) {
|
| 600 |
+ if (System.currentTimeMillis() - LINK_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
|
|
| 601 |
+ saveSystemLog("[LinkcheckTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 602 |
+ throw new RuntimeException("LinkcheckTimeOut : Expired ... ... ... ... ... ... ...");
|
|
| 603 |
+ } |
|
| 521 | 604 |
int recvCount = socketChannel.read(recvBuffer); |
| 522 | 605 |
if (recvCount == -1) {
|
| 523 | 606 |
saveSystemLog("[LINK_CHECK SEND] [FAIL] [SOCKET IS CLOSED]");
|
... | ... | @@ -529,6 +612,9 @@ |
| 529 | 612 |
} |
| 530 | 613 |
} |
| 531 | 614 |
} catch (Exception e) {
|
| 615 |
+ saveSystemLog("ERROR [" + e.getMessage() + "]");
|
|
| 616 |
+ saveSystemLog("ERROR DETAIL");
|
|
| 617 |
+ saveSystemLog(e.toString()); |
|
| 532 | 618 |
throw new RuntimeException(e); |
| 533 | 619 |
} |
| 534 | 620 |
} |
--- src/main/java/com/munjaon/client/server/service/ReportClientService.java
+++ src/main/java/com/munjaon/client/server/service/ReportClientService.java
... | ... | @@ -78,11 +78,19 @@ |
| 78 | 78 |
} |
| 79 | 79 |
} |
| 80 | 80 |
|
| 81 |
+ private boolean checkTimeOut() {
|
|
| 82 |
+ return System.currentTimeMillis() - lastPacketSendTime >= Packet.LIMIT_PACKET_TIMEOUT; |
|
| 83 |
+ } |
|
| 84 |
+ |
|
| 81 | 85 |
@Override |
| 82 | 86 |
public void doService() {
|
| 83 | 87 |
bind(); |
| 84 | 88 |
while (isRun()) {
|
| 85 | 89 |
try {
|
| 90 |
+ if (checkTimeOut()) {
|
|
| 91 |
+ saveSystemLog("[checkTimeOut : Expired ... ... ... ... ... ... ...]");
|
|
| 92 |
+ break; |
|
| 93 |
+ }; |
|
| 86 | 94 |
messageService(); |
| 87 | 95 |
} catch (Exception e) {
|
| 88 | 96 |
throw new RuntimeException(e); |
... | ... | @@ -94,8 +102,9 @@ |
| 94 | 102 |
ByteBuffer sendBuffer = Bind.makeBindBuffer(id, pwd); |
| 95 | 103 |
ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + Bind.BIND_ACK_BODY_LENGTH); |
| 96 | 104 |
try {
|
| 97 |
- saveSystemLog("sendBuffer " + sendBuffer.position() + ":" + sendBuffer.limit());
|
|
| 105 |
+// saveSystemLog("sendBuffer " + sendBuffer.position() + ":" + sendBuffer.limit());
|
|
| 98 | 106 |
saveSystemLog("Bind Try Connect to " + this.address + ":" + this.port);
|
| 107 |
+ Thread.sleep(300); |
|
| 99 | 108 |
socketChannel.write(sendBuffer); |
| 100 | 109 |
saveSystemLog("Bind Read to " + this.address + ":" + this.port);
|
| 101 | 110 |
while (true) {
|
... | ... | @@ -173,6 +182,7 @@ |
| 173 | 182 |
saveSystemLog("Report : " + data.toString());
|
| 174 | 183 |
worker.updateToReport(data); |
| 175 | 184 |
socketChannel.write(Report.makeReportAckBuffer()); |
| 185 |
+ lastPacketSendTime = System.currentTimeMillis(); |
|
| 176 | 186 |
} |
| 177 | 187 |
} catch (Exception e) {
|
| 178 | 188 |
e.printStackTrace(); |
... | ... | @@ -184,6 +194,7 @@ |
| 184 | 194 |
try {
|
| 185 | 195 |
saveSystemLog("LinkCheck Received");
|
| 186 | 196 |
socketChannel.write(LinkCheck.makeLinkCheckAckBuffer()); |
| 197 |
+ lastPacketSendTime = System.currentTimeMillis(); |
|
| 187 | 198 |
} catch (Exception e) {
|
| 188 | 199 |
throw new RuntimeException(e); |
| 189 | 200 |
} |
--- src/main/java/com/munjaon/client/server/service/Service.java
+++ src/main/java/com/munjaon/client/server/service/Service.java
... | ... | @@ -131,6 +131,8 @@ |
| 131 | 131 |
} |
| 132 | 132 |
} finally {
|
| 133 | 133 |
if(logger != null) { logger.close(); logger = null; }
|
| 134 |
+ /* Exception 발생 대비 자원 해제 */ |
|
| 135 |
+ releaseResources(); |
|
| 134 | 136 |
} |
| 135 | 137 |
} |
| 136 | 138 |
} |
--- src/main/resources/application.yml
+++ src/main/resources/application.yml
... | ... | @@ -4,6 +4,10 @@ |
| 4 | 4 |
profiles: |
| 5 | 5 |
default: local |
| 6 | 6 |
|
| 7 |
+logging: |
|
| 8 |
+ level: |
|
| 9 |
+ root: info |
|
| 10 |
+ |
|
| 7 | 11 |
agent: |
| 8 | 12 |
root-path: ${SERVICE_HOME}
|
| 9 | 13 |
server-property-file: ${SERVICE_HOME}/config/munjaonAgent.conf (No newline at end of file)
|
--- src/main/resources/logback-spring.xml
+++ src/main/resources/logback-spring.xml
... | ... | @@ -1,80 +1,58 @@ |
| 1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
| 2 | 2 |
<configuration> |
| 3 |
- <timestamp key="BY_DATE" datePattern="yyyy-MM-dd"/> |
|
| 4 |
- <property name="LOG_PATTERN" |
|
| 5 |
- value="[%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %green([%thread]) %highlight(%-5level) %boldWhite([%C.%M:%yellow(%L)]) - %msg%n%ex"/>
|
|
| 3 |
+ <property name="CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %magenta([%thread]) %highlight([%-3level]) %logger{5} - %msg %n" />
|
|
| 4 |
+ <property name="ROLLING_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{5} - %msg %n" />
|
|
| 5 |
+ <property name="FILE_NAME" value="../logs/agent/munjaonClient.log" /> |
|
| 6 |
+ <property name="LOG_NAME_PATTERN" value="../logs/agent/backup/munjaonClient-%d{yyyy-MM-dd-HH-mm}.%i.log" />
|
|
| 7 |
+ <property name="MAX_FILE_SIZE" value="100MB" /> |
|
| 8 |
+ <property name="TOTAL_SIZE" value="3GB" /> |
|
| 9 |
+ <property name="MAX_HISTORY" value="30" /> |
|
| 6 | 10 |
|
| 7 |
- <springProfile name="local"> |
|
| 8 |
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> |
|
| 9 |
- <encoder> |
|
| 10 |
- <pattern>${LOG_PATTERN}</pattern>
|
|
| 11 |
- </encoder> |
|
| 12 |
- </appender> |
|
| 13 |
- <logger name="com.munjaon.client" level="DEBUG" /> |
|
| 14 |
- <root level="ERROR"> |
|
| 15 |
- <appender-ref ref="CONSOLE"/> |
|
| 16 |
- </root> |
|
| 17 |
- </springProfile> |
|
| 18 | 11 |
|
| 19 |
- <springProfile name="prod|dev"> |
|
| 20 |
- <appender name="FILE-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
|
| 21 |
- <file>./log/info/info-${BY_DATE}.log</file>
|
|
| 22 |
- <filter class = "ch.qos.logback.classic.filter.LevelFilter"> |
|
| 23 |
- <level>INFO</level> |
|
| 24 |
- <onMatch>ACCEPT</onMatch> |
|
| 25 |
- <onMismatch>DENY</onMismatch> |
|
| 26 |
- </filter> |
|
| 27 |
- <encoder> |
|
| 28 |
- <pattern>${LOG_PATTERN}</pattern>
|
|
| 29 |
- </encoder> |
|
| 30 |
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
|
| 31 |
- <fileNamePattern> ./backup/info/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
| 32 |
- <maxFileSize>100MB</maxFileSize> |
|
| 33 |
- <maxHistory>30</maxHistory> |
|
| 34 |
- <totalSizeCap>3GB</totalSizeCap> |
|
| 35 |
- </rollingPolicy> |
|
| 36 |
- </appender> |
|
| 12 |
+ <!-- Console appender 설정 --> |
|
| 13 |
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> |
|
| 14 |
+ <encoder> |
|
| 15 |
+ <Pattern>${CONSOLE_PATTERN}</Pattern>
|
|
| 16 |
+ </encoder> |
|
| 17 |
+ </appender> |
|
| 37 | 18 |
|
| 38 |
- <appender name="FILE-WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
|
| 39 |
- <file>./log/warn/warn-${BY_DATE}.log</file>
|
|
| 40 |
- <filter class = "ch.qos.logback.classic.filter.LevelFilter"> |
|
| 41 |
- <level>WARN</level> |
|
| 42 |
- <onMatch>ACCEPT</onMatch> |
|
| 43 |
- <onMismatch>DENY</onMismatch> |
|
| 44 |
- </filter> |
|
| 45 |
- <encoder> |
|
| 46 |
- <pattern>${LOG_PATTERN}</pattern>
|
|
| 47 |
- </encoder> |
|
| 48 |
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
|
| 49 |
- <fileNamePattern> ./backup/warn/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
| 50 |
- <maxFileSize>100MB</maxFileSize> |
|
| 51 |
- <maxHistory>30</maxHistory> |
|
| 52 |
- <totalSizeCap>3GB</totalSizeCap> |
|
| 53 |
- </rollingPolicy> |
|
| 54 |
- </appender> |
|
| 55 | 19 |
|
| 56 |
- <appender name="FILE-ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
|
| 57 |
- <file>./log/error/error-${BY_DATE}.log</file>
|
|
| 58 |
- <filter class = "ch.qos.logback.classic.filter.LevelFilter"> |
|
| 59 |
- <level>ERROR</level> |
|
| 60 |
- <onMatch>ACCEPT</onMatch> |
|
| 61 |
- <onMismatch>DENY</onMismatch> |
|
| 62 |
- </filter> |
|
| 63 |
- <encoder> |
|
| 64 |
- <pattern>${LOG_PATTERN}</pattern>
|
|
| 65 |
- </encoder> |
|
| 66 |
- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
|
| 67 |
- <fileNamePattern> ./backup/error/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
|
| 68 |
- <maxFileSize>100MB</maxFileSize> |
|
| 69 |
- <maxHistory>30</maxHistory> |
|
| 70 |
- <totalSizeCap>3GB</totalSizeCap> |
|
| 71 |
- </rollingPolicy> |
|
| 72 |
- </appender> |
|
| 20 |
+ <appender name="ROLLING_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
|
| 21 |
+ <encoder> |
|
| 22 |
+ <pattern>${ROLLING_PATTERN}</pattern>
|
|
| 23 |
+ </encoder> |
|
| 24 |
+ <file>${FILE_NAME}</file>
|
|
| 25 |
+ <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
|
| 26 |
+ <fileNamePattern>${LOG_NAME_PATTERN}</fileNamePattern>
|
|
| 27 |
+ <maxHistory>${MAX_HISTORY}</maxHistory>
|
|
| 28 |
+ <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
|
|
| 29 |
+ <totalSizeCap>${TOTAL_SIZE}</totalSizeCap>
|
|
| 30 |
+ </rollingPolicy> |
|
| 31 |
+ </appender> |
|
| 73 | 32 |
|
| 74 |
- <root level="INFO"> |
|
| 75 |
- <appender-ref ref="FILE-INFO"/> |
|
| 76 |
- <appender-ref ref="FILE-WARN"/> |
|
| 77 |
- <appender-ref ref="FILE-ERROR"/> |
|
| 78 |
- </root> |
|
| 79 |
- </springProfile> |
|
| 33 |
+ <logger name="jdbc" level="OFF" additive="false"> |
|
| 34 |
+ <appender-ref ref="STDOUT"/> |
|
| 35 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 36 |
+ </logger> |
|
| 37 |
+ <logger name="jdbc.sqlonly" level="DEBUG" additive="false" > |
|
| 38 |
+ <appender-ref ref="STDOUT"/> |
|
| 39 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 40 |
+ </logger> |
|
| 41 |
+ <logger name="jdbc.sqltiming" level="OFF" additive="false" > |
|
| 42 |
+ <appender-ref ref="STDOUT"/> |
|
| 43 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 44 |
+ </logger> |
|
| 45 |
+ <logger name="org.hibernate.SQL" level="DEBUG" additive="false"> |
|
| 46 |
+ <appender-ref ref="STDOUT"/> |
|
| 47 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 48 |
+ </logger> |
|
| 49 |
+ <logger name="com.munjaon.client" level="INFO" additive="true" > |
|
| 50 |
+ <appender-ref ref="STDOUT"/> |
|
| 51 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 52 |
+ </logger> |
|
| 53 |
+ |
|
| 54 |
+ <root level="INFO"> |
|
| 55 |
+ <appender-ref ref="STDOUT"/> |
|
| 56 |
+ <appender-ref ref="ROLLING_LOG_FILE"/> |
|
| 57 |
+ </root> |
|
| 80 | 58 |
</configuration>(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?