这些天我遇到了类似的问题。所以我写了一个简单的 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.
- 转到
runtime模块并添加并注释您的配置类。它应该类似于此类
- 在
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;
}
}
- 创建一个
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
而已!