Srping Boot ,Spring 적용 가능합니다.
properties 값들을 파일로부터 읽어와 Globals 클래스의 정적변수로 로드시켜주는 클래스를 만들어보려합니다.
해당 클래스를 생성하기 위한 준비를 위한 준비,,,, 를 먼저 해줍니다.
아래의 유틸 클래스 4개를 추가한 채로 작성된 클래스입니다.
WebUtil 클래스
2024.11.14 - [Java/SpringBoot] - [Spring Boot] WebUtil Class 생성 - XSS, SQL injection 보안 취약점 방지
BasicLogger 클래스
2024.11.15 - [분류 전체보기] - [Spring Boot] BasicLogger Class 생성 - 디버깅, 정보 기록 관리
ResourceCloseHelper 클래스
2024.11.16 - [Java/SpringBoot] - [Spring Boot] ResourceCloseHelper Class 생성 - 리소스 관리
StringUtilClass 클래스
2024.09.27 - [Java/SpringBoot] - [Spring Boot] StringUtilClass
StringUtilClass 의 경우 해당 코드 부분만 사용하기 때문에 전체 코드가 너무 길어 일부만 적용해도 문제 없습니다!
💫 GlobalsProperties.java
properties 값들을 파일로부터 읽어와 Globals 클래스의 정적변수로 로드시켜주는 클래스를 만들어보려합니다.
문자열 정보를 기준으로 사용할 전역변수를 시스템 재시작으로 반영할 수 있도록 합니다.
FILE_SEPARATOR : 운영체제에 따른 파일 구분자를 가져옵니다.
RELATIVE_PATH_PREFIX : 프로퍼티 파일의 상대 경로를 가져옵니다.
GLOBALS_PROPERTIES_FILE : 전역 프로퍼티 파일의 절대 경로를 가져옵니다.
getPathProperty(String keyName)
- 특정 키 값에 해당하는 프로퍼티 상대 경로 값을 절대 경로 값으로 반환합니다.
- FileInputStream을 사용하여 파일을 열고, Properties 객체에 파일 내용을 로드합니다.
- 키 값에 해당하는 프로퍼티 값을 가져온 후, 상대 경로 값을 절대 경로 값으로 변환하여 반환합니다.
- 파일을 찾을 수 없거나 입출력 예외가 발생하는 경우 예외를 처리합니다.
getProperty(String keyName)
- 지정된 키 값에 해당하는 프로퍼티 값을 반환합니다.
- FileInputStream을 사용하여 파일을 열고, Properties 객체에 파일 내용을 로드합니다.
- 키 값에 해당하는 프로퍼티 값을 가져와 반환합니다.
- 프로퍼티 값이 null인 경우 빈 문자열을 반환합니다.
- 파일을 찾을 수 없거나 입출력 예외가 발생하는 경우 예외를 처리합니다.
getPathProperty(String fileName, String key)
- 지정된 파일에서 특정 키 값에 해당하는 프로퍼티 상대 경로 값을 절대 경로 값으로 반환합니다.
- FileInputStream을 사용하여 파일을 열고, Properties 객체에 파일 내용을 로드합니다.
- 키 값에 해당하는 프로퍼티 값을 가져온 후, 상대 경로 값을 절대 경로 값으로 변환하여 반환합니다.
- 파일을 찾을 수 없거나 입출력 예외가 발생하는 경우 예외를 처리합니다.
getPropery(String fileName, String Key)
- 지정된 파일에서 특정 키 값에 해당하는 프로퍼티 값을 반환합니다.
- FileInputStream을 사용하여 파일을 열고, Properties 객체에 파일 내용을 로드합니다.
- 키 값에 해당하는 프로퍼티 값을 가져와 반환합니다.
- 파일을 찾을 수 없거나 입출력 예외가 발생하는 경우 예외를 처리합니다.
loadPropertyFile(String property)
- 지정된 프로퍼티 파일의 내용을 파싱하여 (키-값) 형태의 구조체 배열을 반환합니다.
- FileInputStream을 사용하여 파일을 열고, Properties객체에 파일 내용을 로드합니다.
- Enumeration을 사용하여 프로퍼티 키 목록을 순화하며, 각 키-값 쌍을 Map에 저장하고 ArrayList에 추가합니다.
- 파일을 찾을 수 없거나 입출력 예외가 발생하는 경우 예외를 처리합니다.
- 최종적으로 (키-값) 형태의 구조체 배열을 반환합니다.
package com.liyo.cmm.service;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.liyo.cmm.util.ResourceCloseHelper;
import com.liyo.cmm.util.StringUtil;
import com.liyo.cmm.web.WebUtil;
public class GlobalsProperties {
private static final Logger LOGGER = LoggerFactory.getLogger(GlobalsProperties.class);
// 파일구분자
final static String FILE_SEPARATOR = System.getProperty("file.separator");
public static final String RELATIVE_PATH_PREFIX = GlobalsProperties.class.getResource("") == null ? ""
: GlobalsProperties.class.getResource("").getPath()
.substring(0, GlobalsProperties.class.getResource("").getPath().lastIndexOf("com/"))
.replaceAll("%20", " ");
public static final String GLOBALS_PROPERTIES_FILE = RELATIVE_PATH_PREFIX + "liyoProps" + FILE_SEPARATOR
+ "globals.properties";
/**
* 인자로 주어진 문자열을 Key값으로 하는 상대경로 프로퍼티 값을 절대경로로 반환한다(Globals.java 전용)
*
* @param keyName String
* @return String
*/
public static String getPathProperty(String keyName) {
String value = "";
LOGGER.debug("getPathProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName);
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(WebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE));
props.load(new BufferedInputStream(fis));
value = props.getProperty(keyName);
value = (value == null) ? "" : value.trim();
value = RELATIVE_PATH_PREFIX + "liyoProps" + System.getProperty("file.separator") + value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
ResourceCloseHelper.close(fis);
}
return value;
}
/**
* 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다(Globals.java 전용)
*
* @param keyName String
* @return String
*/
public static String getProperty(String keyName) {
String value = "";
LOGGER.debug("===>>> getProperty" + GlobalsProperties.class.getProtectionDomain().getCodeSource() == null ? ""
: StringUtil.isNullToString(
GlobalsProperties.class.getProtectionDomain().getCodeSource().getLocation().getPath()));
LOGGER.debug("getProperty : {} = {}", GLOBALS_PROPERTIES_FILE, keyName);
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(WebUtil.filePathBlackList(GLOBALS_PROPERTIES_FILE));
props.load(new BufferedInputStream(fis));
if (props.getProperty(keyName) == null) {
return "";
}
value = props.getProperty(keyName).trim();
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
ResourceCloseHelper.close(fis);
}
return value;
}
/**
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 상대 경로값을 절대 경로값으로 반환한다
*
* @param fileName String
* @param key String
* @return String
*/
public static String getPathProperty(String fileName, String key) {
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(WebUtil.filePathBlackList(fileName));
props.load(new BufferedInputStream(fis));
fis.close();
String value = props.getProperty(key);
value = RELATIVE_PATH_PREFIX + "liyoProps" + System.getProperty("file.separator") + value;
return value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
ResourceCloseHelper.close(fis);
}
}
/**
* 주어진 파일에서 인자로 주어진 문자열을 Key값으로 하는 프로퍼티 값을 반환한다
*
* @param fileName String
* @param key String
* @return String
*/
public static String getProperty(String fileName, String key) {
FileInputStream fis = null;
try {
Properties props = new Properties();
fis = new FileInputStream(WebUtil.filePathBlackList(fileName));
props.load(new BufferedInputStream(fis));
fis.close();
String value = props.getProperty(key);
return value;
} catch (FileNotFoundException fne) {
LOGGER.debug("Property file not found.", fne);
throw new RuntimeException("Property file not found", fne);
} catch (IOException ioe) {
LOGGER.debug("Property file IO exception", ioe);
throw new RuntimeException("Property file IO exception", ioe);
} finally {
ResourceCloseHelper.close(fis);
}
}
/**
* 주어진 프로파일의 내용을 파싱하여 (key-value) 형태의 구조체 배열을 반환한다.
*
* @param property String
* @return ArrayList
*/
public static ArrayList<Map<String, String>> loadPropertyFile(String property) {
// key - value 형태로 된 배열 결과
ArrayList<Map<String, String>> keyList = new ArrayList<Map<String, String>>();
String src = property.replace('\\', File.separatorChar).replace('/', File.separatorChar);
FileInputStream fis = null;
try {
File srcFile = new File(WebUtil.filePathBlackList(src));
if (srcFile.exists()) {
Properties props = new Properties();
fis = new FileInputStream(src);
props.load(new BufferedInputStream(fis));
fis.close();
Enumeration<?> plist = props.propertyNames();
if (plist != null) {
while (plist.hasMoreElements()) {
Map<String, String> map = new HashMap<String, String>();
String key = (String) plist.nextElement();
map.put(key, props.getProperty(key));
keyList.add(map);
}
}
}
} catch (IOException ex) {
LOGGER.debug("IO Exception", ex);
throw new RuntimeException(ex);
} finally {
ResourceCloseHelper.close(fis);
}
return keyList;
}
}
'Java > SpringBoot' 카테고리의 다른 글
[Spring Boot] 실행 배너 설정하기 (0) | 2024.11.25 |
---|---|
[Spring Boot] ResourceCloseHelper Class 생성 - 리소스 관리 (0) | 2024.11.16 |
[Spring Boot] WebUtil Class 생성 - XSS, SQL injection 보안 취약점 방지 (3) | 2024.11.14 |
[SpringBoot] Spring Cloud OpenFeign 생성하기 (1) | 2024.10.05 |
[Spring Boot] StringUtilClass (0) | 2024.09.29 |