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 - Writing Your Own Extension and Quarkus - Building my first extension,
但基本上这些是为了创建配置而采取的步骤:
- 有一些
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"
这将使用以下模块创建 'sub multi module' 项目:runtume
和 deployment
。
- 转到
runtime
模块并添加和注释您的配置 class。它应该类似于 this class
- 在
runtime
模块中创建一个 producer
class 应该将配置 class 注册为 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
class 来初始化 Producer
:
@Recorder
public class OtaibeKeycloakRecorder {
public void initOtaQuarkusProducer(BeanContainer container, OtaibeKeycloakConfig configuration) {
OtaibeKeycloakQuarkusProducer producer = container.instance(OtaibeKeycloakQuarkusProducer.class);
producer.initialize(configuration);
}
}
- 在
deployment
模块中,您有一个 Processor
class。去那里注册你的 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);
}
你可以找到我的实现 here。
现在,转到将使用配置的初始项目并将 runtime
模块添加为依赖项。
为了确保正确添加配置执行以下maven
命令:
mvn quarkus:generate-config
现在,您可以检查文件 src/main/resources/application.properties.example
并验证您的属性是否已添加到那里。 属性 组应以 quarkus.
加上您的 @ConfigRoot
注释的名称开头。例如,在我的例子中,它将以 quarkus.otaibe.keycloak
开头
就是这样!
我想在 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 - Writing Your Own Extension and Quarkus - Building my first extension, 但基本上这些是为了创建配置而采取的步骤:
- 有一些
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"
这将使用以下模块创建 'sub multi module' 项目:runtume
和 deployment
。
- 转到
runtime
模块并添加和注释您的配置 class。它应该类似于 this class - 在
runtime
模块中创建一个producer
class 应该将配置 class 注册为 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
class 来初始化Producer
:
@Recorder
public class OtaibeKeycloakRecorder {
public void initOtaQuarkusProducer(BeanContainer container, OtaibeKeycloakConfig configuration) {
OtaibeKeycloakQuarkusProducer producer = container.instance(OtaibeKeycloakQuarkusProducer.class);
producer.initialize(configuration);
}
}
- 在
deployment
模块中,您有一个Processor
class。去那里注册你的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);
}
你可以找到我的实现 here。
现在,转到将使用配置的初始项目并将
runtime
模块添加为依赖项。为了确保正确添加配置执行以下
maven
命令:
mvn quarkus:generate-config
现在,您可以检查文件 src/main/resources/application.properties.example
并验证您的属性是否已添加到那里。 属性 组应以 quarkus.
加上您的 @ConfigRoot
注释的名称开头。例如,在我的例子中,它将以 quarkus.otaibe.keycloak
就是这样!