2013-03-11 5 views
1

여전히 코드 중심으로 보이는 모든 튜토리얼을 읽은 후에도 Quartz.NET을 통해 내 머리를 감싼다. 여기 내가하려는 일이있다. 나는 쿼리 로그 테이블과 같은 다양한 일을하는 20 개의 SQL procs를 저장하고, 다른 프로세스에 데이터를 다시 제출한다. 나는이 SP를 일정한 간격으로 하루 종일 운영하고 싶다. Quartz.NET은 당연한 것처럼 보입니다. Quartz.NET을 구현하고 Quartz 어셈블리와 같은 폴더에있는 어셈블리에 작업을 포함하는 Windows Svc를 만들 계획입니다.Quartz.NET에서 다중 저장 프로 시저 실행

이것을 구현하는 나쁜 방법 중 하나는 모든 SP에 대해 하나의 작업 클래스를 작성하고 각각에 대해 별도의 트리거를 연결하는 것입니다. 작업 클래스는 클래스에서 하드 코딩 된 이름을 가진 특정 SP를 간단히 실행합니다. 그것은 나쁜 방법입니다.

그러나 내 인생에서 나는 좋은 방법이 무엇인지 알 수 없습니다. 분명히 단순한 SQL 테이블에서 이름을 얻는 일반적인 'SP를 이름으로 실행'하는 단일 작업 클래스를 사용하는 것은 방법과 같이 보이지만 다른 SP와 관련된 다른 트리거를 얻는 방법은 무엇입니까? Quartz는 20 개의 SP를 모두 별도의 스레드에로드하는 것을 알고 있습니까?

Quartz는 SP 중 하나에 대해 예를 들어 변경된 트리거를 픽업하는 방법을 알고 있습니까? 그것은 작업/트리거를 다시로드하기 위해 Win Svc의 시작/중지주기가되어야합니까, 아니면 일종의 "다시로드"코드를 전달해야합니까?

의견이 있으십니까? Quartz의 오해가 무엇입니까? 그 말은 엔터프라이즈 스케줄러, 시스템, 당신이 설치 한 것 같은 소리가납니다. OTOH의 모든 문서는 마치 OWN 스케줄러 또는 스케줄링 시스템을 만들기 위해 함께 묶어 놓은 클래스들처럼 보입니다. 예를 들어 FTP를 수행하는 어플리케이션을 만들기 위해 .NET에서 제공하는 클래스 들과는 다른 것입니다. 어쩌면 내가 너무 많이 기대하고있을거야?

+0

// 기업용 스케줄러, 시스템, 설치 한 것 같은 말로 표현할 수 있습니다. OTOH가 만드는 모든 문서는 당신이 함께 묶는 수업들처럼 보이게 만듭니다 // 그게 바로 제가 함께있는 곳입니다 .............. – granadaCoder

답변

1

당신의 요구 사항을 충족하기위한 매우 쉬운 방법이 될 수있다 :

시작 샘플 서버와

, 당신은 Windows 서비스에 대한 준비가 만든 템플릿을 출발점으로 테이크 Quartz.NET 배포의 서버가 있습니다 즉, 쉬운 설치에 대한 변경 감지와

를 사용하여 XML 구성을 TopShelf을 사용

quartz.config 파일에 실제 구성이 포함되어 있습니다. quartz_jobs.xml XML 파일에서 작업 및 트리거를 읽을 수 있습니다. quartz.plugin.xml.scanInterval는 = 작업을 매개 변수화 변경 (10 초마다)

를 사용하여 트리거 작업 데이터 맵을 감시하기 위해 10

사용할 수

당신은 추가해야합니다 SQL 실행이 사용자가 제안하는 것처럼 사소한 경우 모든 트리거에 대해 동일한 작업 클래스. 그냥 (당신이 원하는만큼의 트리거를 추가, 10 초마다 실행 여기 샘플) XML에 트리거의 정의에 필요한 설정을 추가 :

<trigger> 
    <simple> 
    <name>sqlTrigger1</name> 
    <job-name>genericSqlJob</job-name> 
    <job-group>sqlJobs</job-group> 
    <job-data-map> 
     <entry> 
     <key>sql_to_run</key> 
     <value>select 1</value> 
     </entry> 
    </job-data-map> 
    <misfire-instruction>SmartPolicy</misfire-instruction> 
    <repeat-count>-1</repeat-count> 
    <repeat-interval>10000</repeat-interval> 
    </simple> 
</trigger> 

그냥 거점으로 quartz_jobs.xml를 사용하고 필요한 사항을 변경합니다.작업

당신은 두 작업의 트리거의 매개 변수, 후자의 최우선 전을 포함 문맥의 MergedJobDataMap에서 작업의 구성에 액세스 할 수있는

를 사용하여 구성.

public void Execute(IJobExecutionContext context) 
{ 
    string sqlToRun = context.MergedJobDataMap.GetString("sql_to_run"); 
    SqlTemplate.ExecuteSql(sqlToRun); 
} 
+0

감사합니다. –

관련 문제