2017-10-05 2 views
1

나는 여기서 당당하게 붙어있는 것 같다.Tomcat을 시작할 때 초기화되는 클래스에서 데이터베이스에 이중 쓰기를 방지하려면 어떻게해야합니까?

tomcat (web.xml의 load-on-startup을 사용)을 시작할 때 싱글 톤 클래스를로드하고 값을 데이터베이스에서로드합니다. 로딩 후에는 동일한 데이터베이스이지만 다른 테이블에 데이터 세트가 기록됩니다. 문제는 데이터가 완벽하게로드되고 있지만 쓰기가 두 번 발생한다는 것입니다. webapp의 인스턴스가 2 개이므로 쓰기가 두 번 일어나고 있음을 이해합니다.

그러나 동일한 webapp 인스턴스가 2 개 필요합니다. 폴더 구조도 변경할 수 없습니다. server.xml은 자동으로 생성되므로 변경할 수 없습니다. (제발, 이럴 수 없어!)

싱글 톤 클래스를 초기화하기 위해 servletcontextlistener를 사용했지만 데이터베이스 프레임 워크 Im을 사용할 때로드되지 않고 쿼리 결과에 널 포인터 예외가 발생했습니다. 따라서 싱글 톤 클래스에는 데이터베이스의 값이로드되지 않습니다.

저는 이클립스를 사용하고 있습니다.

어떻게하면됩니까?

servletcontextlistener가 db 프레임 워크를 미리로드하여 작업을 수행하는지 확인하고 있습니다. 어떤 해결책?

+1

Google에서 도와 드릴 수 있도록 몇 가지 코드를 추가하십시오. 볼 수없는 코드를 디버그 할 수있는 방법은 없습니다. – LW001

답변

1

이 솔루션은 사용자 자신의 "DB 잠금"을 생성하는 것입니다. 즉, webapp의 인스턴스가 올라 오면 테이블을 확인하십시오. "잠금"이라고하고, 존재하지 않으면 DB를 생성 한 다음 삽입을 수행합니다. 웹 애플리케이션의 다음 인스턴스가 시작되면 잠금이 이미 수행 된 것으로 확인되면 잠금을 해제 할 때까지 기다리거나 init을 건너 뛸 수 있습니다.

첫 번째 웹 응용 프로그램이 작업을 완료 한 후에 다른 웹 응용 프로그램을 업그레이드해야하는 경우 DB 업그레이드 상태를 유지 관리하는 테이블을 만듭니다. 각각의 webapp는 초기화 과정에서이 테이블을 업데이트합니다.

관련 문제