当前位置: 首页 > 知识库问答 >
问题:

有条件地工作

庄欣然
2023-03-14

我有如下代码:

@Scheduled(cron = "${cron.foo.bar}")
@ConditionalOnProperty(name="cron.foo.bar.enabled", relaxedNames = false)
public void parseFooBar() {
... blah blah blah ...
}

在我的属性文件中,我有:

cron.foo.bar=1 * * * * ?
cron.foo.bar.enabled=false

这不起作用,parseFooBar在第一秒每分钟都被执行。

但是,如果我添加字段:

@Value("${cron.foo.bar.enabled}")
private String enabledProp;

所以我可以做一个日志,看看它是什么,parseFooBar不会被执行。移除注入的字符串会再次看到parseFooBar执行。我做错了什么?

编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8

编辑2:将注释移动到类型也有效。(无需强制使用@值)。但是注释既是方法又是类型注释?这给了我一点灵活性,可以在方法上做。。。

共有1个答案

缪志新
2023-03-14

Spring Framework中的条件用于控制组件是否在应用程序上下文中注册。从<code>@Conditional<code>的javadoc中:

@条件注释可以以下列任何一种方式使用:

  • 作为使用@Component直接或间接注释的任何类的类型级注释,包括@Configuration
  • 作为元注释,用于编写自定义原型注释
  • 作为任何@Bean方法
  • 上的方法级注释

当条件在parsefooBar上声明时,它没有效果,因为它不是@Bean方法。当您在类型上声明它时,它会按照您的预期工作,因为它会使组件成为条件,因此当属性不匹配时,它不会在应用程序上下文中注册。

 类似资料:
  • 问题内容: 我想基于从客户端传递的String参数注入一个bean。 我希望基于传递的参数注入报表实例。任何帮助将不胜感激。提前致谢 问题答案: 使用工厂方法模式: 当您使用以下命令调用控制器时,Spring可以创建报告类型: 但是,它非常笨拙,并且每次添加新报告类型时都需要进行修改。如果报告类型列表已修复,则可以。但是,如果您计划添加越来越多的类型,这将是一个更可靠的实现: 通过此实现,添加新的

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • 我有一个rxJava2可观察对象,我想有条件地订阅它。场景i将进行网络调用,并且只有当设备连接到网络时才会调用。我想做下面的事情 有什么建议吗?有没有更好的办法?

  • 问题内容: 我的问题的示例架构在SQLFiddle中给出,如下所示: 在在线游戏中,我想选择对手,该对手可以在玩家或中。 所需的示例输入/输出 也就是说,所需的数据可以在任何列中,但是我需要有条件地或以任何其他方式在单列中输出。我听说过MySQL条件列,但无法创建查询以获取所需的输出。有人可以帮助您进行必要的查询吗? 编辑 基于此链接,我运行以下查询,但失败。 问题答案: 我认为您可以使用以下语法

  • 我想从df1中删除某些行。我确实以这种方式编写了条件,并向我显示了要删除的确切行。但是,当我尝试对此数据应用drop时,它不起作用: 当我使用 我可以看到我要删除的数据,这意味着代码有效。然而,当我尝试删除这些行时,它不起作用 我也试过了 但它要么表明: 或 如何删除在(待删除)数据框中指定的这些行? 非常感谢。

  • 本文向大家介绍怎样有条件地渲染组件?相关面试题,主要包含被问及怎样有条件地渲染组件?时的应答技巧和注意事项,需要的朋友参考一下 or