quarkus - 有没有办法以编程方式覆盖应用程序属性?

标签 quarkus

Quarkus documentation 中所述,可以使用读取配置值

String databaseName = ConfigProvider.getConfig().getValue("database.name", String.class);
Optional<String> maybeDatabaseName = ConfigProvider.getConfig().getOptionalValue("database.name", String.class);

是否有可能在运行时设置应用程序属性?

我想在应用程序启动期间设置 quarkus.hibernate-orm.database.default-schema 。这应该以编程方式发生(在 Java 代码中),因此无需从外部定义属性。

最佳答案

是的,这是可能的。

例如,您可以添加:

package org.acme.config;

import org.eclipse.microprofile.config.spi.ConfigSource;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class InMemoryConfigSource implements ConfigSource {
    private static final Map<String, String> configuration = new HashMap<>();

    static {
        configuration.put("my.prop", "1234");
    }

    @Override
    public int getOrdinal() {
        return 275;
    }

    @Override
    public Set<String> getPropertyNames() {
        return configuration.keySet();
    }

    @Override
    public String getValue(final String propertyName) {
        return configuration.get(propertyName);
    }

    @Override
    public String getName() {
        return InMemoryConfigSource.class.getSimpleName();
    }
}

在您的代码中,通过添加 src/main/resources/META-INF/services/org.eclipse.microprofile.config.spi.ConfigSource,使用 Java 的服务加载器机制让 Quarkus 知道它> 文件包含:

org.acme.config.InMemoryConfigSource

参见this指南了解更多详细信息。

关于quarkus - 有没有办法以编程方式覆盖应用程序属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72110212/

相关文章:

java - RestAssured 不遵守 Quarkus 中的 ObjectMapper 配置

elasticsearch - 使用 quarkuslogging-gelf 扩展和 ELK 堆栈时出现索引错误

java - Quarkus 响应式(Reactive) vs quarkus 命令式有关系吗?

java - Quarkus 项目在 Bamboo 中构建失败

java - Hibernate ORM 是否与 GraalVM native 镜像编译兼容?

java - 如何从 quarkus 应用程序中正确地将逻辑删除消息发布到压缩的 kafka 主题?

java - 使用 aws lambda native 读取文本文件

java - 如何使用Quarkus指定要在application.properties中使用的基本docker镜像

java - Quarkus 延迟初始化

hibernate - 导入 quarkus-hibernate-orm 后如何使用 Oracle 数据库配置 Quarkus?