有没有办法以编程方式覆盖应用程序属性?
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 指南。
如 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 指南。