c3p0源码解析 四 (C3P0Config类)

    public final static String CFG_FINDER_CLASSNAME_KEY = "com.mchange.v2.c3p0.cfg.finder";

    public final static String DEFAULT_CONFIG_NAME = "default";

    public final static C3P0Config MAIN;

    final static MLogger logger = MLog.getLogger( C3P0Config.class );

    static
    {
<span style="white-space:pre">	</span>C3P0Config protoMain;


<span style="white-space:pre">	</span>String cname = MultiPropertiesConfig.readVmConfig().getProperty( CFG_FINDER_CLASSNAME_KEY );


<span style="white-space:pre">	</span>C3P0ConfigFinder cfgFinder = null;
<span style="white-space:pre">	</span>try
<span style="white-space:pre">	</span>    {
<span style="white-space:pre">		</span>if (cname != null)
<span style="white-space:pre">		</span>    cfgFinder = (C3P0ConfigFinder) Class.forName( cname ).newInstance();
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>    }
<span style="white-space:pre">	</span>catch (Exception e)
<span style="white-space:pre">	</span>    {
<span style="white-space:pre">		</span>if ( logger.isLoggable(MLevel.WARNING) )
<span style="white-space:pre">		</span>    logger.log( MLevel.WARNING, "Could not load specified C3P0ConfigFinder class'" + cname + "'.", e);
<span style="white-space:pre">	</span>    }


<span style="white-space:pre">	</span>try
<span style="white-space:pre">	</span>    { 
<span style="white-space:pre">		</span>if (cfgFinder == null)
<span style="white-space:pre">		</span>    {
<span style="white-space:pre">			</span>Class.forName("org.w3c.dom.Node");
<span style="white-space:pre">			</span>Class.forName("com.mchange.v2.c3p0.cfg.C3P0ConfigXmlUtils"); //fail nicely if we don't have XML libs
<span style="white-space:pre">			</span>cfgFinder = new DefaultC3P0ConfigFinder();
<span style="white-space:pre">		</span>    }
<span style="white-space:pre">		</span>protoMain = cfgFinder.findConfig(); 
<span style="white-space:pre">	</span>    }
<span style="white-space:pre">	</span>catch (Exception e)
<span style="white-space:pre">	</span>    { 
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>if ( logger.isLoggable(MLevel.WARNING) )
<span style="white-space:pre">		</span>    logger.log( MLevel.WARNING, "XML configuration disabled! Verify that standard XML libs are available.", e);


<span style="white-space:pre">		</span>HashMap flatDefaults = C3P0ConfigUtils.extractHardcodedC3P0Defaults();
<span style="white-space:pre">		</span>flatDefaults.putAll( C3P0ConfigUtils.extractC3P0PropertiesResources() );
<span style="white-space:pre">		</span>protoMain = C3P0ConfigUtils.configFromFlatDefaults( flatDefaults );
<span style="white-space:pre">	</span>    }
<span style="white-space:pre">	</span>MAIN = protoMain;


<span style="white-space:pre">	</span>warnOnUnknownProperties( MAIN );
    }
    NamedScope defaultConfig;
    HashMap configNamesToNamedScopes;


    C3P0Config( NamedScope defaultConfig, HashMap configNamesToNamedScopes)
    {
<span style="white-space:pre">	</span>this.defaultConfig = defaultConfig;
<span style="white-space:pre">	</span>this.configNamesToNamedScopes = configNamesToNamedScopes;
    }

1. MultiPropertiesConfig.readVmConfig().getProperty( CFG_FINDER_CLASSNAME_KEY );

2. MultiPropertiesConfig类

    final static MultiPropertiesConfig EMPTY = new BasicMultiPropertiesConfig( new String[0] );

    final static String VM_CONFIG_RSRC_PATHS = "/com/mchange/v2/cfg/vmConfigResourcePaths.txt";

    static MultiPropertiesConfig vmConfig = null;
<span style="white-space:pre">		</span>List rps = new ArrayList();


<span style="white-space:pre">		</span>BufferedReader br = null;
<span style="white-space:pre">		</span>try
<span style="white-space:pre">		</span>    {
<span style="white-space:pre">			</span>InputStream is = MultiPropertiesConfig.class.getResourceAsStream( VM_CONFIG_RSRC_PATHS );
<span style="white-space:pre">			</span>if ( is != null )
<span style="white-space:pre">			</span>    {
<span style="white-space:pre">				</span>br = new BufferedReader( new InputStreamReader( is, "8859_1" ) );
<span style="white-space:pre">				</span>String rp;
<span style="white-space:pre">				</span>while ((rp = br.readLine()) != null)
<span style="white-space:pre">				</span>    {
<span style="white-space:pre">					</span>rp = rp.trim();
<span style="white-space:pre">					</span>if ("".equals( rp ) || rp.startsWith("#"))
<span style="white-space:pre">					</span>    continue;
<span style="white-space:pre">					</span>
<span style="white-space:pre">					</span>rps.add( rp );
<span style="white-space:pre">				</span>    }
<span style="white-space:pre">				</span>vmConfig = new BasicMultiPropertiesConfig( (String[]) rps.toArray( new String[ rps.size() ] ) ); 
<span style="white-space:pre">			</span>    }
#
# example file, using config files expected by various 
# mchange libraries.
#
# note that later files "shadow" earlier ones, and that
# the name '/' is reserved as a special token for
# System properties.
#


/mchange-commons.properties
/mchange-log.properties
/c3p0.properties
/
根据路径读取的文件,这个文件在mchang-commons-java.jar中,类也是。

3. BasicMultiPropertiesConfig类

    String[] rps;
    Map  propsByResourcePaths = new HashMap();
    Map  propsByPrefixes;


    Properties propsByKey;
if ("/".equals(rp)) 
<span style="white-space:pre">	</span>propsByResourcePaths.put( rp, System.getProperties() );
<span style="white-space:pre">	</span>goodPaths.add( rp );
else Properties p = new Properties();
     InputStream pis = MultiPropertiesConfig.class.getResourceAsStream( rp );
     p.load( pis );
     propsByResourcePaths.put( rp, p );
     goodPaths.add( rp );
<span style="white-space:pre">	</span>this.rps = (String[]) goodPaths.toArray( new String[ goodPaths.size() ] );
<span style="white-space:pre">	</span>this.propsByPrefixes = Collections.unmodifiableMap( extractPrefixMapFromRsrcPathMap(rps, propsByResourcePaths) );
<span style="white-space:pre">	</span>this.propsByResourcePaths = Collections.unmodifiableMap( propsByResourcePaths );
<span style="white-space:pre">	</span>this.propsByKey = extractPropsByKey(rps, propsByResourcePaths);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值