You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus CDI:如何仅在ServiceFoo禁用时执行ServiceBar启动逻辑?

解决方法

你可以通过Quarkus提供的@UnlessProperty条件注解实现需求,它和@LookupIfProperty是反向逻辑,能精准控制Bean或方法的生效时机。

有两种实现方式,可根据你的场景选择:

方式一:仅控制启动方法的执行

如果希望ServiceBar Bean始终存在,但只在ServiceFoo禁用时执行启动逻辑,直接给onStart()方法添加@UnlessProperty注解:

@ApplicationScoped
class ServiceBar implements Service {

  @Startup
  // 仅当service.foo.enabled不等于true时,该方法才会执行
  @UnlessProperty(name = "service.foo.enabled", stringValue = "true")
  public void onStart() { 
    // 此处编写启动逻辑
  }

  public String name() {
    return "bar";
  }
}

方式二:控制整个ServiceBar Bean的实例化

如果希望只有在ServiceFoo禁用时,ServiceBar才被实例化(启动逻辑自然也只会此时执行),直接给ServiceBar类添加@UnlessProperty注解:

@ApplicationScoped
// 仅当service.foo.enabled不等于true时,该Bean才会被创建
@UnlessProperty(name = "service.foo.enabled", stringValue = "true")
class ServiceBar implements Service {

  @Startup
  public void onStart() { 
    // 此处编写启动逻辑
  }

  public String name() {
    return "bar";
  }
}

补充说明

如果service.foo.enabled属性可能未配置,可通过defaultValue参数设置默认行为,比如:

@UnlessProperty(name = "service.foo.enabled", stringValue = "true", defaultValue = "false")

这样当属性未配置时,会默认按false处理,即ServiceBar的启动逻辑会执行。

内容的提问来源于stack exchange,提问作者Fabrizio Fortino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:25:07