반응형
Spring Boot 에서 사용한 유틸클래스여서 해당 카테고리에 넣었지만, Spring 에서도 적용 가능합니다!
아래의 유틸 클래스를 적용하여 생성한 클래스입니다.
BasicLogger 클래스 - https://velog.io/@bi-sz/Spring-Boot-BasicLogger-Class
⭐ ResourceCloseHelper.java
Closeable, JDBC, Socket 등의 리소스를 안전하게 닫아 리소스 누수 를 방지하고, 애플리케이션의 안정성을 높이기 위해 ResourceCloseHelper 클래스를 생성해줍니다.
close(Closeable... resources
- Closeable타입의 리소스 (예: InputStream, OutputStream 등..) 를 안전하게 닫습니다.
- IOException과 일반 Exception이 발생해도 무시하고 계속 진행합니다.
closeDBObjects(Wrapper... objects)
- JDBC 관련 리소스(ResultSet, Statement, Connection)를 안전하게 닫습니다.
- SQLException과 일반 Exception이 발생해도 무시하고 계속 진행합니다.
closeSocketObjects(Socket socket, ServerSocket server)
- Socket과 ServerSocket 리소스를 안전하게 닫습니다.
- IOException과 일반 Exception이 발생해도 무시하고 계속 진행합니다.
closeSockets(Socket... sockets)
- Socket 리소스를 안전하게 닫습니다.
- IOException과 일반 Exception이 발생해도 무시하고 계속 진행합니다.
package com.liyo.cmm.util;
import java.io.Closeable;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Wrapper;
public class ResourceCloseHelper {
/**
* Resource close 처리.
*
* @param resources
*/
public static void close(Closeable... resources) {
for (Closeable resource : resources) {
if (resource != null) {
try {
resource.close();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
}
}
}
/**
* JDBC 관련 resource 객체 close 처리
*
* @param objects
*/
public static void closeDBObjects(Wrapper... objects) {
for (Object object : objects) {
if (object != null) {
if (object instanceof ResultSet) {
try {
((ResultSet) object).close();
} catch (SQLException ignore) {
BasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Statement) {
try {
((Statement) object).close();
} catch (SQLException ignore) {
BasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Connection) {
try {
((Connection) object).close();
} catch (SQLException ignore) {
BasicLogger.ignore("Occurred SQLException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else {
throw new IllegalArgumentException("Wrapper type is not found : " + object.toString());
}
}
}
}
/**
* Socket 관련 resource 객체 close 처리
*
* @param objects
*/
public static void closeSocketObjects(Socket socket, ServerSocket server) {
if (socket != null) {
try {
socket.shutdownOutput();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
}
try {
socket.close();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ignored!!");
}
}
if (server != null) {
try {
server.close();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ignored!!");
}
}
}
/**
* Socket 관련 resource 객체 close 처리
*
* @param sockets
*/
public static void closeSockets(Socket... sockets) {
for (Socket socket : sockets) {
if (socket != null) {
try {
socket.shutdownOutput();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to shutdown ouput is ignored!!");
}
try {
socket.close();
} catch (IOException ignore) {
BasicLogger.ignore("Occurred IOException to close resource is ingored!!");
} catch (Exception ignore) {
BasicLogger.ignore("Occurred Exception to close resource is ignored!!");
}
}
}
}
}
JDBC와 Socket 관련 리소스 관리에 유용한 ResourceCloseHelper 클래스를 정리해보았습니다.
반응형
'Java > SpringBoot' 카테고리의 다른 글
[Spring Boot] 실행 배너 설정하기 (0) | 2024.11.25 |
---|---|
[Spring Boot] GlobalsProperties 클래스 생성하기 - 정적변수, 전역변수 사용 (1) | 2024.11.18 |
[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 |