DB connection close가 안되는데 close 방법 알려주시면 감사하겠습니다.
- 작성자 :
- 박*규
- 작성일 :
- 2022-10-05 08:31:45
- 조회수 :
- 1,297
- 구분 :
- 개발환경 / 3.8
- 진행상태 :
- 완료
Q
첫번째 질문입니다.
public class PostgreAbstractDAO extends EgovAbstractDAO {
@SuppressWarnings("restriction")
@Resource(name="egov.sqlMapClient")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSuperSqlMapClient(sqlMapClient);
}
}
Spring Quartz에서 10분에 한번씩 Connection 하여 업무 처리하게 구현하였습니다.
문제는 connection후 close가 안되는 문제가 발생하여 몇시간 후에는 더 이상 connection이 안됩니다.
위의 PostgreAbstractDAO 를 호출하여 Connection 됩니다.
PostgreAbstractDAO postgreAbstractDAO = (PostgreAbstractDAO) applicationContext.getBean("PostgreAbstract");
어떻게하면 Connection이 Close 할수 있는지 알려주시면 감사하겠습니다.
이전 질문의 답변 중
"작업을 수행하는 로직을 구현한 부분에서 생성했던 connection 객체를 직접적으로 반환하면 될 것으로 판단됩니다."
하셨는데 Connection이나 Close 를 소스상에서 하지를 않아서 Connection 객체를 반환할 방법을 모르겠습니다.
두번째 질문입니다.
EgovResourceCloseHelper 클래스에 closeDBObjects 메소드를 호출하려 해도
할용방법을 모르겠습니다.
closeDBObjects 에 무엇을 넘겨야 하는지 모르겠습니다.
자세히 알려주시면 감사하겠습니다.
/**
* 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 (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Statement) {
try {
((Statement)object).close();
} catch (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Connection) {
try {
((Connection)object).close();
} catch (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else {
throw new IllegalArgumentException("Wrapper type is not found : " + object.toString());
}
}
}
}
public class PostgreAbstractDAO extends EgovAbstractDAO {
@SuppressWarnings("restriction")
@Resource(name="egov.sqlMapClient")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSuperSqlMapClient(sqlMapClient);
}
}
Spring Quartz에서 10분에 한번씩 Connection 하여 업무 처리하게 구현하였습니다.
문제는 connection후 close가 안되는 문제가 발생하여 몇시간 후에는 더 이상 connection이 안됩니다.
위의 PostgreAbstractDAO 를 호출하여 Connection 됩니다.
PostgreAbstractDAO postgreAbstractDAO = (PostgreAbstractDAO) applicationContext.getBean("PostgreAbstract");
어떻게하면 Connection이 Close 할수 있는지 알려주시면 감사하겠습니다.
이전 질문의 답변 중
"작업을 수행하는 로직을 구현한 부분에서 생성했던 connection 객체를 직접적으로 반환하면 될 것으로 판단됩니다."
하셨는데 Connection이나 Close 를 소스상에서 하지를 않아서 Connection 객체를 반환할 방법을 모르겠습니다.
두번째 질문입니다.
EgovResourceCloseHelper 클래스에 closeDBObjects 메소드를 호출하려 해도
할용방법을 모르겠습니다.
closeDBObjects 에 무엇을 넘겨야 하는지 모르겠습니다.
자세히 알려주시면 감사하겠습니다.
/**
* 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 (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Statement) {
try {
((Statement)object).close();
} catch (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else if (object instanceof Connection) {
try {
((Connection)object).close();
} catch (Exception ignore) {
EgovBasicLogger.ignore("Occurred Exception to close resource is ingored!!");
}
} else {
throw new IllegalArgumentException("Wrapper type is not found : " + object.toString());
}
}
}
}
환경정보
-
- OS 정보 : WINDOW
- 표준프레임워크 버전 : 3.8
- JDK(JRE) 정보 : 1.8
- WAS 정보 : tomcat 8.5
- DB 정보 : Postgresql 12
- 기타 환경 정보 : ibatis
A
안녕하세요.
표준프레임워크센터입니다.
단편적인 코드 내용만으로 DB Close 안되는 이유를
확인해 드리기는 어려울듯 합니다.
수동으로 DB Open 및 Close 하시는 것보다
공통컴포넌트에 비슷한 예시가 있으므로
참조하여 구현하시는게 좋을듯 합니다.
공통컴포넌트는 다음 URL 주소에서 다운로드가 가능합니다.
https://www.egovframe.go.kr/home/sub.do?menuNo=49
관련 쿼츠 설정은 다음 디렉토리에 존재 합니다.
/src/main/resources/egovframework/spring/com/scheduling/
다음 쿼츠 설정파일을 참조 하실수 있고
context-scheduling-sts-bst.xml
다음과 같은 서비스를 호출하시도록 작성하면
/src/main/java/egovframework/com/sts/bst/service/impl/EgovBbsStatsServiceImpl.java
*Impl.java 클래스에 대해 트랜잭션 처리까지 자동으로 가능합니다.
감사합니다.
표준프레임워크센터입니다.
단편적인 코드 내용만으로 DB Close 안되는 이유를
확인해 드리기는 어려울듯 합니다.
수동으로 DB Open 및 Close 하시는 것보다
공통컴포넌트에 비슷한 예시가 있으므로
참조하여 구현하시는게 좋을듯 합니다.
공통컴포넌트는 다음 URL 주소에서 다운로드가 가능합니다.
https://www.egovframe.go.kr/home/sub.do?menuNo=49
관련 쿼츠 설정은 다음 디렉토리에 존재 합니다.
/src/main/resources/egovframework/spring/com/scheduling/
다음 쿼츠 설정파일을 참조 하실수 있고
context-scheduling-sts-bst.xml
다음과 같은 서비스를 호출하시도록 작성하면
/src/main/java/egovframework/com/sts/bst/service/impl/EgovBbsStatsServiceImpl.java
*Impl.java 클래스에 대해 트랜잭션 처리까지 자동으로 가능합니다.
감사합니다.