簡體   English   中英

quarkus / microprofile 中的組配置

[英]Group configuration in quarkus / microprofile

我想在 Quarkus 中對配置項進行分組並將它們用作Map 類似於下一個application.properties的內容:

greeting.names = tom,jane
greeting.tom.message = hello
greeting.tom.name = tom
greeting.jane.message = hi
greeting.jane.name = jane

並將它們放在Map的應用程序中,如下所示:

@ConfigProperties
public class GreetingConfig {

   private String name;
   private String message;

   // getters / setters
}

並像這樣使用它們:

private Map<String, GreetingConfig> config;

它們現在已被名稱索引,但List也可以(這也是我真正需要的):

greeting.1.message = hello
greeting.1.name = tom
greeting.2.message = hi
greeting.2.name = jane

關於如何實現這一點的任何想法? 我有一個編程解決方案,但更喜歡僅通過注釋的解決方案

這幾天我也遇到了類似的問題。 所以我寫了一個簡單的 Quarkus 擴展來幫助我進行配置。 您可以使用 Quarkus 站點中的指南: Quarkus - 編寫您自己的擴展Quarkus - 構建我的第一個擴展,但基本上這些是創建配置所采取的步驟:

  1. 有一些maven多模塊項目(不是將消耗配置的項目)。
  2. 從項目目錄執行類似的命令:
mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create-extension -N \
    -Dquarkus.artifactIdBase=keycloak-extension \
    -Dquarkus.artifactIdPrefix=otaibe-commons-quarkus- \
    -Dquarkus.nameBase="Keycloak extension"

這將在那里創建具有以下模塊的“子多模塊”項目: runtumedeployment

  1. 轉到runtime模塊並添加和注釋您的配置類。 它應該類似於這個類
  2. runtime模塊中創建一個producer類,它應該將配置類注冊為 CDI bean:
@ApplicationScoped
public class OtaibeKeycloakQuarkusProducer {

    private volatile OtaibeKeycloakConfig otaibeKeycloakConfig;

    void initialize(OtaibeKeycloakConfig config) {
        this.otaibeKeycloakConfig = config;
    }

    @Singleton
    @Produces
    public OtaibeKeycloakConfig otaibeKeycloakConfig() {
        return otaibeKeycloakConfig;
    }

}
  1. 創建一個Recorder類,它應該初始化Producer
@Recorder
public class OtaibeKeycloakRecorder {

    public void initOtaQuarkusProducer(BeanContainer container, OtaibeKeycloakConfig configuration) {
        OtaibeKeycloakQuarkusProducer producer = container.instance(OtaibeKeycloakQuarkusProducer.class);
        producer.initialize(configuration);
    }

}
  1. deployment模塊中,您有一個Processor類。 去那里注冊您的Producer以作為 CDI bean 和您的Recorder進行注入以對其進行初始化。 添加類似的代碼:
    @BuildStep
    AdditionalBeanBuildItem beans() {
        return AdditionalBeanBuildItem.builder().addBeanClasses(OtaibeKeycloakQuarkusProducer.class).build();
    }

    @BuildStep
    @Record(ExecutionTime.RUNTIME_INIT)
    void otaibeKeycloackConfigBuildItem(BeanContainerBuildItem beanContainer,
                                        OtaibeKeycloakConfig otaibeKeycloakConfig,
                                        OtaibeKeycloakRecorder recorder) {
        recorder.initOtaQuarkusProducer(beanContainer.getValue(), otaibeKeycloakConfig);
    }

你可以在這里找到我的實現。

  1. 現在,轉到將使用配置的初始項目,並將runtime模塊添加為依賴項。

  2. 為了確保正確添加配置,請執行以下maven命令:

mvn quarkus:generate-config

現在,您可以檢查文件src/main/resources/application.properties.example並驗證您的屬性是否已添加到那里。 屬性組應該以quarkus. 加上您的@ConfigRoot注釋的名稱。 例如,在我的情況下,它將以quarkus.otaibe.keycloak

就是這樣!

現在在 Quarkus 2.9 中,您可以使用@ConfigMapping@ConfigProperties已棄用)。

@StaticInitSafe
@ConfigMapping
public interface GreetingConfigMapping {
    Map<Integer, GreetingDetail> greeting();
}

interface GreetingDetail {
    String name();
    String message();
}

@QuarkusTest中嘗試; @Inject它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM