![](/img/trans.png)
[英]Java Quarkus/MicroProfile Restclient inject sslContext
[英]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 - 構建我的第一個擴展,但基本上這些是創建配置所采取的步驟:
maven
多模塊項目(不是將消耗配置的項目)。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"
這將在那里創建具有以下模塊的“子多模塊”項目: runtume
和deployment
。
@ApplicationScoped
public class OtaibeKeycloakQuarkusProducer {
private volatile OtaibeKeycloakConfig otaibeKeycloakConfig;
void initialize(OtaibeKeycloakConfig config) {
this.otaibeKeycloakConfig = config;
}
@Singleton
@Produces
public OtaibeKeycloakConfig otaibeKeycloakConfig() {
return otaibeKeycloakConfig;
}
}
Recorder
類,它應該初始化Producer
:@Recorder
public class OtaibeKeycloakRecorder {
public void initOtaQuarkusProducer(BeanContainer container, OtaibeKeycloakConfig configuration) {
OtaibeKeycloakQuarkusProducer producer = container.instance(OtaibeKeycloakQuarkusProducer.class);
producer.initialize(configuration);
}
}
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);
}
你可以在這里找到我的實現。
現在,轉到將使用配置的初始項目,並將runtime
模塊添加為依賴項。
為了確保正確添加配置,請執行以下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.