private void createJob(DefaultAcsClient client, String jobName, JobProperty jobProperty, String namespaceSource) throws Exception {
		CreateJobRequest request = new CreateJobRequest();
		request.setNamespace(properties.getNamespace());
		request.setNamespaceSource(namespaceSource);
		request.setGroupId(properties.getGroupId());
		request.setName(jobName);
		request.setParameters(jobProperty.getJobParameter());

		if (jobProperty.getJobType().equals(JobType.JAVA.getKey())) {
			request.setJobType(JobType.JAVA.getKey());
			request.setClassName(jobProperty.getClassName());
		}
		else {
			request.setJobType(jobProperty.getJobType());
		}

		if (SchedulerxConstants.JOB_MODEL_MAPREDUCE_ALIAS.equals(jobProperty.getJobModel())) {
			request.setExecuteMode(ExecuteMode.BATCH.getKey());
		}
		else {
			request.setExecuteMode(jobProperty.getJobModel());
		}
		if (StringUtils.isNotEmpty(jobProperty.getDescription())) {
			request.setDescription(jobProperty.getDescription());
		}

		if (StringUtils.isNotEmpty(jobProperty.getContent())) {
			request.setContent(jobProperty.getContent());
		}

		if (StringUtils.isNotEmpty(jobProperty.getCron()) && StringUtils.isNotEmpty(jobProperty.getOneTime())) {
			throw new IOException("cron and oneTime shouldn't set together");
		}
		if (StringUtils.isNotEmpty(jobProperty.getCron())) {
			CronExpression cronExpression = new CronExpression(jobProperty.getCron());
			Date now = new Date();
			Date nextData = cronExpression.getTimeAfter(now);
			Date next2Data = cronExpression.getTimeAfter(nextData);
			if (nextData != null && next2Data != null) {
				long interval = TimeUnit.MILLISECONDS.toSeconds((next2Data.getTime() - nextData.getTime()));
				if (interval < SchedulerxConstants.SECOND_DELAY_MAX_VALUE) {
					request.setTimeType(TimeType.SECOND_DELAY.getValue());
					request.setTimeExpression(String.valueOf(interval < SchedulerxConstants.SECOND_DELAY_MIN_VALUE ?
							SchedulerxConstants.SECOND_DELAY_MIN_VALUE : interval));
				}
				else {
					request.setTimeType(TimeType.CRON.getValue());
					request.setTimeExpression(jobProperty.getCron());
				}
			}
			else {
				request.setTimeType(TimeType.CRON.getValue());
				request.setTimeExpression(jobProperty.getCron());
			}
		}
		else if (StringUtils.isNotEmpty(jobProperty.getOneTime())) {
			request.setTimeType(TimeType.ONE_TIME.getValue());
			request.setTimeExpression(jobProperty.getOneTime());
		}
		else {
			request.setTimeType(TimeType.API.getValue());
		}

		if (jobProperty.getTimeType() != null) {
			request.setTimeType(jobProperty.getTimeType());
			if (StringUtils.isNotEmpty(jobProperty.getTimeExpression())) {
				request.setTimeExpression(jobProperty.getTimeExpression());
			}
		}

		request.setTimeoutEnable(true);
		request.setTimeoutKillEnable(true);
		request.setSendChannel(SchedulerxConstants.JOB_ALARM_CHANNEL_DEFAULT);
		request.setFailEnable(true);
		request.setTimeout(SchedulerxConstants.JOB_TIMEOUT_DEFAULT);
		request.setMaxAttempt(SchedulerxConstants.JOB_RETRY_COUNT_DEFAULT);
		request.setAttemptInterval(SchedulerxConstants.JOB_RETRY_INTERVAL_DEFAULT);
		CreateJobResponse response = client.getAcsResponse(request);
		if (response.getSuccess()) {
			logger.info("create schedulerx job successfully, jobId={}, jobName={}", response.getData().getJobId(), jobName);
		}
		else {
			throw new IOException("create schedulerx job failed, jobName=" + jobName + ", message=" + response.getMessage());
		}
	}
create job.

@param client          pop client
@param jobName         job name
@param jobProperty     job property
@param namespaceSource namespace source
@throws Exception create job exception
spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-schedulerx/src/main/java/com/alibaba/cloud/scheduling/schedulerx/service/JobSyncService.java