Quarkus CDI:查找和启动事件

问题描述 投票:0回答:1

从官方文档中的代码开始,我创建了以下结构:

interface Service {
  String name();
}

@LookupIfProperty(name = "service.foo.enabled", stringValue = "true")
@ApplicationScoped
class ServiceFoo implements Service {

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

@ApplicationScoped
class ServiceBar implements Service {

  @Startup
  public void onStart() { // startup logic }

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

即使未注入 bean,ServiceBar.onStart() 中的代码也始终会执行。有没有办法只在ServiceFoo禁用时才执行ServiceBar启动逻辑?

java quarkus cdi
1个回答
0
投票

正如@ladicek 已经描述的那样,

LookupIfProperty
不影响启用。作为解决方法,我通过以下方式更改了代码:

interface Service {
  String name();
}

@LookupIfProperty(name = "service.foo.enabled", stringValue = "true")
@ApplicationScoped
class ServiceFoo implements Service {

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

@ApplicationScoped
class ServiceBar implements Service {

  @ConfigProperty(name = "service.foo.enabled", defaultValue = "false")
  Boolean isFooEnabled;

  @Startup
  public void onStart() { 
    if (!isFooEnabled) {
      // startup logic
    }
  }

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

这样只有在ServiceFoo没有开启的情况下才会执行启动逻辑。不是超级优雅,但很有效。

© www.soinside.com 2019 - 2024. All rights reserved.