property 설정
This commit is contained in:
@@ -9,49 +9,64 @@ import javax.validation.constraints.Pattern;
|
|||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class KjbProperty {
|
public class KjbProperty {
|
||||||
|
@KjbPropertyValue(key = "kjb.eai.batch.url")
|
||||||
@Pattern(regexp = "^(https?://[^\\s/$.?#][^\\s]*)|\\s*$", message = "kjb.eai_batch.url 는 유효한 URL 형식이거나 공백이어야 합니다. 예: http://example.com/api")
|
@Pattern(regexp = "^(https?://[^\\s/$.?#][^\\s]*)|\\s*$", message = "kjb.eai_batch.url 는 유효한 URL 형식이거나 공백이어야 합니다. 예: http://example.com/api")
|
||||||
private String eaiBatchUrl;
|
private String eaiBatchUrl;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.eai.batch.connection_timeout", defaultValue = "5")
|
||||||
@Min(1) @Max(10)
|
@Min(1) @Max(10)
|
||||||
private int eaiBatchConnectionTimeout = 5;
|
private int eaiBatchConnectionTimeout = 5;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.eai.batch.response_timeout", defaultValue = "5")
|
||||||
@Min(1) @Max(30)
|
@Min(1) @Max(30)
|
||||||
private int eaiBatchResponseTimeout = 5;
|
private int eaiBatchResponseTimeout = 5;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.eai.batch.timeout", defaultValue = "10")
|
||||||
@Min(1) @Max(30)
|
@Min(1) @Max(30)
|
||||||
private int eaiBatchTimeout = 10;
|
private int eaiBatchTimeout = 10;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.eai.batch.charset", defaultValue = "euc-kr")
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private String eaiBatchCharset = "euc-kr";
|
private String eaiBatchCharset = "euc-kr";
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.eai_batch.send_dir")
|
||||||
@NotEmpty(message = "kjb.ums.eai_batch.send_dir 는 필수값입니다.")
|
@NotEmpty(message = "kjb.ums.eai_batch.send_dir 는 필수값입니다.")
|
||||||
private String umsEaiBatchSendDir;
|
private String umsEaiBatchSendDir;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.eai_batch.backup_dir")
|
||||||
@NotEmpty(message = "kjb.ums.eai_batch.backup_dir 는 필수값입니다.")
|
@NotEmpty(message = "kjb.ums.eai_batch.backup_dir 는 필수값입니다.")
|
||||||
private String umsEaiBatchBackupDir;
|
private String umsEaiBatchBackupDir;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.eai_batch.error_dir")
|
||||||
@NotEmpty(message = "kjb.ums.eai_batch.error_dir 는 필수값입니다.")
|
@NotEmpty(message = "kjb.ums.eai_batch.error_dir 는 필수값입니다.")
|
||||||
private String umsEaiBatchErrorDir;
|
private String umsEaiBatchErrorDir;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.eai_batch.interface_id")
|
||||||
@Pattern(regexp = "^[a-zA-Z0-9]{13}$", message = "kjb.ums.eai_batch.interface_id 는 12자리 영문대소문자 및 숫자 조합이어야 합니다.")
|
@Pattern(regexp = "^[a-zA-Z0-9]{13}$", message = "kjb.ums.eai_batch.interface_id 는 12자리 영문대소문자 및 숫자 조합이어야 합니다.")
|
||||||
private String umsEaiBatchInterfaceId;
|
private String umsEaiBatchInterfaceId;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.eai_batch.retention_date", defaultValue = "60")
|
||||||
@Min(1) @Max(365)
|
@Min(1) @Max(365)
|
||||||
private int umsEaiBatchRetentionDate = 60;
|
private int umsEaiBatchRetentionDate = 60;
|
||||||
|
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.host")
|
||||||
@Pattern(regexp = "^(https?://[^\\s/$.?#][^\\s]*)|\\s*$", message = "kjb.ums.host_url 는 유효한 URL 형식이거나 공백이어야 합니다. 예: http://example.com/api")
|
@Pattern(regexp = "^(https?://[^\\s/$.?#][^\\s]*)|\\s*$", message = "kjb.ums.host_url 는 유효한 URL 형식이거나 공백이어야 합니다. 예: http://example.com/api")
|
||||||
private String umsHostUrl;
|
private String umsHostUrl;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.api_key")
|
||||||
@Pattern(regexp = "^[a-zA-Z0-9_-]{36}$", message = "kjb.ums.api_key 입력 형식이 맞지 않습니다.")
|
@Pattern(regexp = "^[a-zA-Z0-9_-]{36}$", message = "kjb.ums.api_key 입력 형식이 맞지 않습니다.")
|
||||||
private String umsApiKey;
|
private String umsApiKey;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.connection_timeout", defaultValue = "5")
|
||||||
@Min(1) @Max(10)
|
@Min(1) @Max(10)
|
||||||
private int umsConnectionTimeout = 5;
|
private int umsConnectionTimeout = 5;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.response_timeout", defaultValue = "5")
|
||||||
@Min(1) @Max(30)
|
@Min(1) @Max(30)
|
||||||
private int umsResponseTimeout = 5;
|
private int umsResponseTimeout = 5;
|
||||||
|
|
||||||
|
@KjbPropertyValue(key = "kjb.ums.timeout", defaultValue = "10")
|
||||||
@Min(1) @Max(30)
|
@Min(1) @Max(30)
|
||||||
private int umsTimeout = 10;
|
private int umsTimeout = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.eactive.ext.kjb.common;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.FIELD)
|
||||||
|
public @interface KjbPropertyValue {
|
||||||
|
String key();
|
||||||
|
String defaultValue() default "";
|
||||||
|
}
|
||||||
@@ -15,16 +15,27 @@ import org.apache.hc.core5.util.Timeout;
|
|||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
|
import java.time.Duration;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class KjbEaiBatchModule {
|
public class KjbEaiBatchModule {
|
||||||
private final KjbProperty property;
|
private final KjbProperty property;
|
||||||
private final CloseableHttpClient httpClient;
|
private final CloseableHttpClient httpClient;
|
||||||
private final RequestConfig requestConfig;
|
private final RequestConfig requestConfig;
|
||||||
|
private LocalDateTime lastFileRetentionCheckTime;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public KjbEaiBatchModule(@NotNull KjbProperty property) {
|
public KjbEaiBatchModule(@NotNull KjbProperty property) {
|
||||||
@@ -104,4 +115,52 @@ public class KjbEaiBatchModule {
|
|||||||
return resMessage;
|
return resMessage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1시간 주기로 파일 유지 및 삭제 처리
|
||||||
|
*/
|
||||||
|
public void processFileRetentionDays() {
|
||||||
|
if (lastFileRetentionCheckTime == null) {
|
||||||
|
lastFileRetentionCheckTime = LocalDateTime.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 현재 시간과 1시간 이상 차이 날때 동작
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
boolean isOver = Duration.between(lastFileRetentionCheckTime, now).abs().toHours() == 1;
|
||||||
|
|
||||||
|
if (!isOver) return;
|
||||||
|
|
||||||
|
this.walkDeletePath(property.getUmsEaiBatchSendDir());
|
||||||
|
this.walkDeletePath(property.getUmsEaiBatchBackupDir());
|
||||||
|
this.walkDeletePath(property.getUmsEaiBatchErrorDir());
|
||||||
|
|
||||||
|
lastFileRetentionCheckTime = now;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void walkDeletePath(String path) {
|
||||||
|
final int retentionDays = property.getUmsEaiBatchRetentionDate();
|
||||||
|
log.info("WalkDelete - {} / Retention days : {}", path, retentionDays);
|
||||||
|
|
||||||
|
Path dir = Paths.get(path);
|
||||||
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
|
try (Stream<Path> paths = Files.walk(dir)) {
|
||||||
|
paths.sorted(Comparator.reverseOrder()).forEach(p -> {
|
||||||
|
try {
|
||||||
|
BasicFileAttributes attrs = Files.readAttributes(p, BasicFileAttributes.class);
|
||||||
|
LocalDateTime created = attrs.creationTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||||
|
|
||||||
|
long over = Math.abs(Duration.between(created, now).toDays());
|
||||||
|
if (over >= retentionDays) {
|
||||||
|
Files.deleteIfExists(p);
|
||||||
|
log.info("Delete over {} days - {}", retentionDays, p);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("Delete fail - {}", p.getFileName().toString(), e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("Not found path : {}", path);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.eactive.ext.kjb.utils;
|
||||||
|
|
||||||
|
import com.eactive.ext.kjb.common.KjbProperty;
|
||||||
|
import com.eactive.ext.kjb.common.KjbPropertyValue;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
public class KjbPropertyUtil {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Class<?> clazz = KjbProperty.class;
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
for (Field field : clazz.getDeclaredFields()) {
|
||||||
|
KjbPropertyValue anno = field.getAnnotation(KjbPropertyValue.class);
|
||||||
|
|
||||||
|
if (anno != null) {
|
||||||
|
sb.append("insert into EMSADM.TSEAIRM24 (PRPTYGROUPNAME, PRPTYNAME, PRPTY2VAL) values ('Monitoring', ");
|
||||||
|
|
||||||
|
String key = anno.key();
|
||||||
|
String defValue = anno.defaultValue();
|
||||||
|
if (StringUtils.isEmpty(defValue)) defValue = "";
|
||||||
|
|
||||||
|
sb.append("'").append(key).append("', '").append(addQuote(defValue)).append("');\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(sb);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String addQuote(String str) {
|
||||||
|
return str.replace("'", "''");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user