com.jn.langx.configuration.database.DatabaseBasedConfigurationRepository Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of langx-java Show documentation
Show all versions of langx-java Show documentation
Java lang extensions for java6+, a supplement to , replacement of a Guava, commons-lang.
Core utilities, Collection utilities, IO utilities, Cache, Configuration library ...
package com.jn.langx.configuration.database;
import com.jn.langx.configuration.AbstractConfigurationRepository;
import com.jn.langx.configuration.Configuration;
import com.jn.langx.lifecycle.InitializationException;
import com.jn.langx.util.Preconditions;
import com.jn.langx.util.collection.Collects;
import com.jn.langx.util.collection.diff.CollectionDiffResult;
import com.jn.langx.util.collection.diff.KeyBuilder;
import com.jn.langx.util.function.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.List;
public class DatabaseBasedConfigurationRepository extends AbstractConfigurationRepository, DatabaseBasedConfigurationWriter> {
private static final Logger logger = LoggerFactory.getLogger(DatabaseBasedConfigurationRepository.class);
@Override
public void init() throws InitializationException {
if (!inited) {
super.init();
Preconditions.checkNotNull(loader, "the configuration load is null");
if (writer == null) {
logger.warn("The writer is not specified for the repository ({}), will disable write configuration to storage", name);
}
// enable refresh
if (reloadIntervalInSeconds > 1) {
logger.info("The configuration refresh task is disabled for repository: {}", name);
}
inited = true;
}
}
@Override
public void reload() {
List newConfigs = Collects.asList(loader.loadAll());
Collection oldConfigs = getAll().values();
CollectionDiffResult differResult = Collects.diff(oldConfigs, newConfigs, getComparator(), new KeyBuilder() {
@Override
public String getKey(T configuration) {
return configuration.getId();
}
});
if (differResult.hasDifference()) {
Collects.forEach(differResult.getAdds(), new Consumer() {
@Override
public void accept(T newConfig) {
add(newConfig, false);
}
});
Collects.forEach(differResult.getUpdates(), new Consumer() {
@Override
public void accept(T t) {
update(t, false);
}
});
Collects.forEach(differResult.getRemoves(), new Consumer() {
@Override
public void accept(T t) {
removeById(t.getId());
}
});
}
}
}