Struts 2를 사용하여 Java 웹 응용 프로그램을 만들고 있습니다. 현재 각 페이지가로드 될 때마다 새 db 연결을 설정 한 다음 요청이 끝날 때이 db 연결을 닫습니다. 결과 HTML을 렌더링하기 직전에. 따라서 각 요청은 고유 한 db 연결을 갖습니다.Java에서 정적 메서드로 데이터베이스 연결을 공유합니다.
내 모델 클래스 내에서 주어진 사용자 ID가 존재하면 true를 반환하는 User.exists(id)
과 같이 많은 정적 메소드를 갖고 싶습니다. 그렇지 않은 경우 false를 반환합니다. 또는 User.getEmail(id)
또는 User.disable(id)
과 같은 다른 유틸리티 메소드.
제 질문은 이러한 정적 메서드로 db 연결을 공유하는 편리한 방법이 있습니까? 이러한 모든 방법에 대한 두 번째 인수 (예 : User.exists(id, db)
)로 연결을 전달해야하는 것은 추악하고 너무 편리하지 않습니다.
각 유틸리티 메서드에서 새 db 연결을 얻은 다음 결과를 반환하기 전에 닫으면 어떨까요? 성능에 어떤 영향을 미칩니 까? 나는 요청 내에서 (사용자 입력의 유효성을 검사 할 때와 같이) 몇 번이나 이러한 메소드를 20-30 번 호출해야 할 수도있다.
DB 연결이 완전히 스레드 안전 인 경우에만 가능합니다. 연결 풀을 사용하십시오. – SLaks
@SLaks 각 페이지 요청을 시작할 때 struts에 의해 호출되는 struts 인터셉터를 사용하고 있습니다. db 연결은 인터셉터의'intercept()'메소드 내에서 이루어지며 요청이 렌더링을 완료했음을 알고있는 동일한 메소드에서 또한 닫힙니다. 그래서 나는 스레드 측에서 안전하다고 생각합니다. 내 관심사는 각 정적 유틸리티 메서드 내에서 새 연결을 만드는 것입니다. 그 성능에 영향을 미칠까요? –
JEE 응용 프로그램 서버를 사용하는 경우 연결 풀링 기능을 사용하십시오. 그런 다음 OSIV 인터셉터를 구현할 수 있습니다.이 인터셉터는 Spring/hibernate를 사용하면 트랜잭션 세션을 설정하는 작업 만 필요합니다. 트랜잭션 세션은 인터셉터가 풀릴 때만 닫히지 만 DB 액세스가 필요하지 않으면 db에 대한 실제 연결을 여는 데 시간을 소비하지 않습니다. – Quaternion