public String computeIfAbsent(String key, Function<String, String> function) {
        String value = cache.get(key);
        // value might be empty here!
        // empty value from config center will be cached here
        if (value == null) {
            // lock free, tolerate repeat apply, will return previous value
            cache.putIfAbsent(key, function.apply(key));
            value = cache.get(key);
        }
        return value;
    }
@Test
    void test() {
        ConfigurationCache configurationCache = new ConfigurationCache();
        String value = configurationCache.computeIfAbsent("k1", k -> "v1");
        Assertions.assertEquals(value, "v1");
        value = configurationCache.computeIfAbsent("k1", k -> "v2");
        Assertions.assertEquals(value, "v1");
    }