Я пытаюсь использовать @Conditional условие с @StepScope Spring Batch, чтобы использовать параметр JobParameter в Condition, но во время инициализации условия JobScope не активен. Я попытался определить, установлен ли флаг и только экземпляр компонента когда этот флаг установлен, в противном случае необходимо создать экземпляр другого компонента того же интерфейса.Можно ли использовать @StepScope вместе с @Conditional и jobParameters?
В настоящее время я пытаюсь сделать что-то вроде
interface IInter {
void bla();
}
@Component("A")
@Conditional(ACond.class)
@StepScope
class A implements IInter {
@Override
public void bla() {
//... do something ....
}
}
@Component("B")
@Conditional(BCond.class)
@StepScope
class B implements IInter {
@Override
public void bla() {
//... do something else ...
}
}
class ACond implements Condition {
@Value("#{jobParameters[AProp]}")
String jobPropA;
@Value("#{jobParameters[BProp]}")
String jobPropB;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return !Utils.isEmpty(jobPropA) && Utils.isEmpty(jobPropB);
}
}
class BCond implements Condition {
@Value("#{jobParameters[AProp]}")
String jobPropA;
@Value("#{jobParameters[BProp]}")
String jobPropB;
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return Utils.isEmpty(jobPropA) && !Utils.isEmpty(jobPropB);
}
}
Я попытался условия с и без @StepScope но @value значения равны нулю, так как они получают intitialized в начале программы.
Это также будет возможность показать мне другой способ, как я могу достичь загрузки компонента только в том случае, если задан параметр занятости.