gpt4 book ai didi

java - @StepScope 是否可以与 @Conditional 和 jobParameters 一起使用?

转载 作者:行者123 更新时间:2023-12-01 09:29:46 26 4
gpt4 key购买 nike

我尝试将 @Conditional 条件与 Spring Batch 的 @StepScope 一起使用,以在 Condition 中使用 jobParameter,但在条件初始化期间,JobScope 未处于 Activity 状态我试图确定是否设置了一个标志,并且仅在设置此标志时实例化一个bean,否则应实例化同一接口(interface)的另一个bean。

目前我正在尝试做类似的事情

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值是空的,因为它们在程序开始时被初始化。

这也是一个选项,可以向我展示一种不同的方式,即仅在设置作业参数时如何实现加载 bean。

最佳答案

您所提议的内容将不起作用,因为Conditional需要在作业执行之前可用。我建议编写一个 FactoryBean 来处理这个用例。

关于java - @StepScope 是否可以与 @Conditional 和 jobParameters 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com