![JAR search and dependency download from the Maven repository](/logo.png)
io.mstream.trader.commons.config.supplier.ConfigSupplier Maven / Gradle / Ivy
The newest version!
package io.mstream.trader.commons.config.supplier;
import io.mstream.trader.commons.config.Config;
import io.mstream.trader.commons.config.ConfigClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ratpack.service.Service;
import ratpack.service.StartEvent;
import javax.inject.Inject;
import java.util.Optional;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.function.Supplier;
public class ConfigSupplier
implements Supplier, Service {
private static final Logger LOGGER = LoggerFactory.getLogger
(ConfigSupplier.class);
private final Class configType;
private final ConfigClient configClient;
private final ScheduledExecutorService executor;
private volatile T config;
@Inject
public ConfigSupplier(
@Config
Class configType,
ConfigClient configClient,
ScheduledExecutorService executor
) {
this.configType = configType;
this.configClient = configClient;
this.executor = executor;
}
@Override
public void onStart(StartEvent event)
throws Exception {
executor.scheduleAtFixedRate(this::loadConfig, 0, 1, TimeUnit.SECONDS);
}
public R get(Function subConfigExtractor) {
T config = get();
return subConfigExtractor.apply(config);
}
@Override
public T get() {
loadConfig();
if (config == null) {
throw new IllegalStateException("config is not loaded");
}
return config;
}
private void loadConfig() {
if (config != null) {
return;
}
Optional configOpt = configClient.read(configType);
if (!configOpt.isPresent()) {
LOGGER.error("config can't be loaded");
} else {
config = configOpt.get();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy