Elastic - job 스 크 립 트 작업
스 크 립 트 작업 은 windows 의 cmd, Liux 의 셸 파일 등 스 크 립 트 파일 을 정기 적 으로 스케줄 링 하 는 데 사 용 됩 니 다. 스케줄 링 할 때 현재 스케줄 링 된 ShardingContext 를 JSON 문자열 로 스 크 립 트 스케줄 링 매개 변수 로 전달 합 니 다.작업 에 대응 하 는 class 를 지정 할 필요 가 없습니다. 왜냐하면 우 리 는 우리 자신의 class 를 통 해 스케줄 링 을 하 는 것 이 아니 기 때 문 입 니 다.스 크 립 트 작업 은 설정 할 때
로 설정 합 니 다. 예 는 다음 과 같 습 니 다.<job:script id="myScriptJob" registry-center-ref="regCenter"
cron="0/30 * * * * ?" sharding-total-count="3"
sharding-item-parameters="0=shard-0,1=shard-1,2=shard-2"
script-command-line="echo hello" overwrite="true"/>
그 중에서 script - command - line 속성 은 이 스케줄 에 대응 하 는 스 크 립 트 파일 경로 나 실행 가능 한 명령 을 지정 하 는 데 사 용 됩 니 다.hello 와 ShardingContext 에 대응 하 는 JSON 형식 을 간단하게 인쇄 할 뿐 입 니 다.다른 설정 매개 변 수 는 이전에 소개 한 간단 한 작업 의 설정 매개 변수 와 유사 합 니 다.
스 크 립 트 작업 은 com. dangdang. ddframe. job. executor. type. ScriptJobExecutor 에서 실 행 됩 니 다.그 코드 는 다음 과 같다.
public final class ScriptJobExecutor extends AbstractElasticJobExecutor {
public ScriptJobExecutor(final JobFacade jobFacade) {
super(jobFacade);
}
@Override
protected void process(final ShardingContext shardingContext) {
final String scriptCommandLine = ((ScriptJobConfiguration) getJobRootConfig().getTypeConfig()).getScriptCommandLine();
if (Strings.isNullOrEmpty(scriptCommandLine)) {
throw new JobConfigurationException("Cannot find script command line for job '%s', job is not executed.", shardingContext.getJobName());
}
executeScript(shardingContext, scriptCommandLine);
}
private void executeScript(final ShardingContext shardingContext, final String scriptCommandLine) {
CommandLine commandLine = CommandLine.parse(scriptCommandLine);
commandLine.addArgument(GsonFactory.getGson().toJson(shardingContext), false);
try {
new DefaultExecutor().execute(commandLine);
} catch (final IOException ex) {
throw new JobConfigurationException("Execute script failure.", ex);
}
}
}
(본 고 는 Elim 이 2017 년 10 월 1 일 에 작성)