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

Is there a way to override application properties programmatically?

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();
    }
}

在您的代码中,并使用 Java 的服务加载器机制让 Quarkus 知道它,方法是添加包含以下内容的 src/main/resources/META-INF/services/org.eclipse.microprofile.config.spi.ConfigSource 文件:

org.acme.config.InMemoryConfigSource.

有关详细信息,请参阅 this 指南。