如何解决如何通过varargs程序参数有条件排除Spring bean?
如何让spring评估varargs
并有条件地运行bean?
@SpringBootConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
@Service
@Order(1) //run if no vararg is given
public class Job1 implements ApplicationRunner {
}
@Service
@Order(2) //Todo run only if a "job2" occurs as vararg
public class Job2 implements ApplicationRunner {
}
问题:我想通过在应用程序启动时从命令行给出的varargs
有条件地启动这些作业。有可能吗?
解决方法
您如何在这些bean上使用.loc[1]
,并通过属性从命令行包含/排除它们呢?
完整的示例可能是:
dfmap.loc[X,col]
然后使用以下属性传递属性:
@ConditionalOnProperty
另一种选择是从Job1 / Job2类中删除@ Component / @ Service,并在配置类中创建类似于以下内容的Bean:
@Service
@Order(1) //run if no vararg is given
@ConditionalOnProperty(name = "my.property",havingValue = "job1")
public class Job1 implements ApplicationRunner {
}
@Service
@Order(2) //TODO run only if a "job2" occurs as vararg
@ConditionalOnProperty(name = "my.property",havingValue = "job2")
public class Job2 implements ApplicationRunner {
}
,
可以通过简单地实现自定义Condition
并评估ApplicationArguments
来实现。我正在寻找的参数在Spring之前称为非可选args :
class Job2Condition implements Condition {
@Override
public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
return context.getBeanFactory()
.getBean(ApplicationArguments.class)
.getNonOptionArgs()
.contains("job2");
}
}
@Component
@Conditional(Job2Condition.class)
public class Job2 implements ApplicationRunner {
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。