/**
* 用于读取系统参数的工具类
* 该工具类提供统一的方法读取系统参数,不管该参数是保存在配置文件还是数据库
*/
public class ConfigurationHelper
{
private static final CPSLogger LOGGER = new CPSLogger(
ConfigurationHelper.class);
private static Map<String, ConfigurationProvider> cacheProviders
= new ConcurrentHashMap<String, ConfigurationProvider>();
private static Object cacheProviderMaplock = new Object();
private static ConfigurationProvider getProviderByCacheName(
final String cacheName)
{
if (null == cacheName)
{
return null;
}
ConfigurationProvider provider = cacheProviders.get(cacheName);
if (null == provider)
{
synchronized (cacheProviderMaplock)
{
provider = cacheProviders.get(cacheName);
if (null == provider)
{
final Map<String, ConfigurationProvider> beans =
ContextRegistry.getContextHolder()
.getBeansOfType(ConfigurationProvider.class);
LOGGER.atFunction("Cache provider is not found,
refresh provider map with beans",
cacheName,
beans);
if (null != beans)
{
for (final ConfigurationProvider bean : beans.values())
{
cacheProviders.put(bean.getName(), bean);
}
}
provider = cacheProviders.get(cacheName);
if (null == provider)
{
LOGGER.error("Cache provider is still not found,
maybe it's undefined",
new Object[] { cacheName });
}
}
}
}
return provider;
}
}