Destiny.Lin
6 months ago
3 changed files with 112 additions and 2 deletions
@ -0,0 +1,90 @@ |
|||||||
|
package com.fanruan.boot.mem; |
||||||
|
|
||||||
|
import com.fanruan.config.event.ConfigListener; |
||||||
|
import com.fanruan.config.realm.ConfigRepositoryProvider; |
||||||
|
import com.fr.log.FineLoggerFactory; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
import java.util.Set; |
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
|
||||||
|
/** |
||||||
|
* MemConfigRealm |
||||||
|
* |
||||||
|
* @author rinoux |
||||||
|
* created on 2023-06-08 |
||||||
|
*/ |
||||||
|
public class MemConfigRepository implements ConfigRepositoryProvider { |
||||||
|
|
||||||
|
private final String namespace; |
||||||
|
private final Map<String, Map<String, String>> configValueMap = new ConcurrentHashMap<>(); |
||||||
|
|
||||||
|
private final Map<String, Set<ConfigListener>> configListenerMap = new ConcurrentHashMap<>(); |
||||||
|
|
||||||
|
public MemConfigRepository(String namespace) { |
||||||
|
this.namespace = namespace; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String namespace() { |
||||||
|
return namespace; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String get(String configID, String configItem, String group, boolean cache) throws Exception { |
||||||
|
return configValueMap.computeIfAbsent(configID, k -> new ConcurrentHashMap<>()).get(configItem); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void set(String configID, String configItem, String value, String group) throws Exception { |
||||||
|
configValueMap.computeIfAbsent(configID, k -> new ConcurrentHashMap<>()).put(configItem, value); |
||||||
|
triggerConfigChange(configID); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void remove(String configID, String group) { |
||||||
|
configValueMap.remove(configID); |
||||||
|
triggerConfigChange(configID); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removeKey(String configID, String key, String group) { |
||||||
|
Map<String, String> configItemMap = configValueMap.get(configID); |
||||||
|
if (configItemMap!= null) { |
||||||
|
configItemMap.remove(key); |
||||||
|
} |
||||||
|
triggerConfigChange(configID); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void watch(String configID, String item, String group, ConfigListener configListener) { |
||||||
|
Set<ConfigListener> configListeners = configListenerMap.computeIfAbsent(configID, k -> Collections.synchronizedSet(new HashSet<>())); |
||||||
|
configListeners.add(configListener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void unWatch(String configID, String item, String group, ConfigListener configListener) { |
||||||
|
Set<ConfigListener> configListeners = configListenerMap.get(configID); |
||||||
|
if (configListeners != null) { |
||||||
|
configListeners.remove(configListener); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void triggerConfigChange(String configID) { |
||||||
|
Set<ConfigListener> configListeners = configListenerMap.get(configID); |
||||||
|
if (configListeners != null) { |
||||||
|
List<ConfigListener> configListenerList = new ArrayList<>(configListeners); |
||||||
|
for (ConfigListener configListener : configListenerList) { |
||||||
|
try { |
||||||
|
configListener.onConfigChange(); |
||||||
|
} catch (Exception e) { |
||||||
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
package com.fanruan.boot.mem; |
||||||
|
|
||||||
|
import com.fanruan.config.realm.ConfigRepositoryBuilder; |
||||||
|
import com.fanruan.config.realm.ConfigRepositoryProvider; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 设计器MemConfigRepositoryBuilder |
||||||
|
* |
||||||
|
* @author Destiny.Lin |
||||||
|
* @since 11.0 |
||||||
|
* Created on 2024/5/29 |
||||||
|
*/ |
||||||
|
public class MemConfigRepositoryBuilder implements ConfigRepositoryBuilder { |
||||||
|
@Override |
||||||
|
public ConfigRepositoryProvider build(String namespace) throws Exception { |
||||||
|
return new MemConfigRepository(namespace); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue