2012-02-15 2 views
1

시나리오 : 두 개의 다른 모듈 (예 : A와 B)이 있습니다. A가 두 개의 서로 다른 머신 (예 : A1과 A2)에 배포되고 B가 두 개의 다른 머신 (예 : B1과 B2)에 배포되고 A 모듈과 관련된 작업이 예약되고 필요한 Java 클래스가 A A1과 A2 모두 가지고 있습니다).석영 클러스터링 문제

저는 봄철 프레임 워크 석영 빈을 사용하고 모듈이 바람둥이에서 시작하자마자 모든 기계에서 스케줄러를 시작합니다.

이 모든 정보는 쿼츠와 관련된 데이터베이스 테이블에 저장됩니다.

가장 좋은 부분 : 실행 중/실행 전, A1이 다운되면 운 좋게 스케줄러가 A2를 찾으면 A2에서 작업이 실행됩니다. 필요한 모든 클래스가 A2에 있으므로 아무런 문제가 없습니다. 성공!

잘못된 부분 : A1이 다운 된 경우, 스케줄러가 B1과 B2를 찾지 못한 경우 unluckily, 작업은 둘 중 하나에서 실행되지만 B1/B2에 필요한 클래스가 없기 때문에 i 예외가 발견되지 않는 클래스를 가져옵니다. 실패!

쿼리 : 모듈 A와 관련된 작업이 A가 배포 된 컴퓨터에서만 실행되고 B가 배포 된 컴퓨터에서는 실행되지 않도록하려면 어떻게해야합니까?

미리 감사드립니다.

답변

0

문제가 해결되었습니다. quartz.properties 파일에 있습니다.

org.quartz.jobStore.tablePrefix = QRTZ_ 예를 들어, 모듈 A의 : A_QRTZ_ 및 모듈 B에 대한 : B_QRTZ_

를 데이터베이스에서 QRTZ_로 시작하는 모든 테이블을 삭제하고 새로 만들려면 다음과 같이 속성 tablePrefix 설정 접두사 A_QRTZ_ 및 B_QRTZ_가있는 테이블

그래서 Module-A는 A_QRTZ_ 테이블에만 액세스하고 모듈은 위에서 언급 한 시나리오에서 B_QRTZ_ 테이블 만 액세스합니다.

테이블의 수가 증가하지만 궁극적으로이 테이블에 저장된 행/데이터의 총 수는 이전과 같습니다.