package org.apache.mybatis.jpa.id; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class IdentifierGeneratorFactory { private static final Logger _logger = LoggerFactory.getLogger(IdentifierGeneratorFactory.class); public static ConcurrentHashMap generatorStrategyMap = new ConcurrentHashMap(); public IdentifierGeneratorFactory() { register("uuid", new UUIDGenerator()); register("uuid.hex", new UUIDHexGenerator()); register("snowflakeid", new SnowFlakeIdGenerator()); } public IdentifierGeneratorFactory(long datacenterId, long machineId) { register("uuid", new UUIDGenerator()); register("uuid.hex", new UUIDHexGenerator()); register("snowflakeid", new SnowFlakeIdGenerator(datacenterId,machineId)); } public ConcurrentHashMap getGeneratorStrategyMap() { return generatorStrategyMap; } public void setGeneratorStrategyMap(ConcurrentHashMap generatorStrategyMap) { for (Map.Entry entry : generatorStrategyMap.entrySet()) { register(entry.getKey(),entry.getValue()); } } public void register(String strategy, IdentifierGenerator generator) { if(IdentifierGeneratorFactory.generatorStrategyMap.containsKey(strategy)) { return; } IdentifierGeneratorFactory.generatorStrategyMap.put(strategy, generator); _logger.debug( "Registering IdentifierGenerator strategy [{}] -> [{}]", strategy, generator.getClass().getName() ); } public String generate(String strategy) { return generatorStrategyMap.get(strategy).generate(null); } }