Операции¶
Система Юниверс предоставляет возможность создания собственных системных или пакетных операций. Для этого используется фреймворк SpringBatch.
Примечание
Все константы заданы в классе com.universe.mdm.sdk.spring.configuration.SDKSpringConfiguration
Зависимости¶
Модуль с операцией нуждается в зависимостях:
'org.unidata.mdm:org.unidata.mdm.core:6.9.0-RELEASE'
'org.springframework.batch'
Также необходимо указать зависимости в имплементации модуля dependencies:
@Override
public Collection<Dependency> getDependencies() {
return Arrays.asList(
// system
new Dependency("org.unidata.mdm.core", "6.0"),
);
}
Составляющие¶
Параметры, которые используются в операциях и доступны к просмотру/изменению задаются классом org.unidata.mdm.core.type.job.JobParameterDescriptor
Первый шаг при создании операции - задать бин org.unidata.mdm.core.service.impl.job.JobDescriptorFactoryBean
Примечание
В JobDescriptorFactoryBean задается имя бина операции. в примере SDK_OPERATION_NAME
@Bean
public JobDescriptorFactoryBean sdkDescriptorFactoryBean(TextService textService){
final JobParameterDescriptor<?>[] params = {
// параметры
}
JobDescriptorFactoryBean fb = new JobDescriptorFactoryBean();
fb.setJobName(SDK_OPERATION_NAME);
fb.setDisplayName(() -> textService.getText(SDK_OPERATION_DISPLAY_NAME));
fb.setDescription(() -> textService.getText(SDK_OPERATION_DESCRIPTION));
fb.setParameter(params);
return fb;
}
Параметры JobParameterDescriptor описываются в классе org.unidata.mdm.core.type.job.JobParameterType
могут быть разных типов: строковый, целочисленный, булевый, etc. Одинарный или массив.
JobParameterDescriptor.integer()
.name(SDK_RECORD_JOB_BATCH_SIZE)
.displayName(() -> textService.getText(SDK_RECORD_JOB_BATCH_SIZE_DISPLAY_NAME))
.description(() -> textService.getText(SDK_RECORD_JOB_BATCH_SIZE_DESCRIPTION))
.defaultSingle(500L)
.required(false)
.build()
Далее задать логику путем реализации необходимых интерфейсов из пакета org.springframework.batch.item
@Bean(name = SDK_JOB_READER)
@StepScope
public ItemReader<String> sdkJobReader() {
return new SDKJobReader();
}
@Bean(name = SDK_OPERATION_NAME)
public Job ldapIntegrationJob(
JobRepository jobRepository,
JobBuilderFactory jobBuilderFactory,
// listener, steps, etc
) {
return jobBuilderFactory.get(SDK_OPERATION_NAME)
.repository(jobRepository)
// start, next, listener, etc
.build();