Skip to content

Java客户端 配置与扩展

He, Jiehui edited this page Aug 3, 2016 · 13 revisions

简介

dal.xml是DAL的核心配置文件,包括两大部分内容。

  1. 逻辑数据库和物理数据库如何映射的配置文件。
  2. DAL组件配置

配置示例

 <dal name="com.dal.test">
 	 <databaseSets>
 		<databaseSet name="SqlServerSimpleShard" provider="sqlProvider"
              shardingStrategy="class=com.ctrip.platform.dal.dao.strategy.ShardColModShardStrategy;columns=CityID,tableIndex;mod=2;">
             <add name="daltestS1db" databaseType="Master" sharding="1" connectionString="SimpleShard_1"/>   
             <add name="daltestS0db" databaseType="Master" sharding="0" connectionString="SimpleShard_0"/>   
 		</databaseSet>
 		<databaseSet name="MultiThreadingTest" provider="sqlProvider">
 			<add name="MultiThreadingTest" databaseType="Master" sharding="" connectionString="MultiThreadingTest"/>   
 		</databaseSet>
 	    <databaseSet name="MySqlSimpleShard" provider="mySqlProvider"
    	shardingStrategy="class=com.ctrip.platform.dal.dao.strategy.ShardColModShardStrategy;columns=CountryID;mod=2;tableColumns=CityID;tableMod=4;separator=_;shardedTables=person">
 	    	<add name="dal_shard_0" databaseType="Master" sharding="0" connectionString="dal_shard_0"/>   
 	    	<add name="dal_shard_1" databaseType="Master" sharding="1" connectionString="dal_shard_1"/>   
 	    </databaseSet>
 	</databaseSets>
 	<LogListener enabled="true">
 		<logger>com.ctrip.platform.dal.sql.logging.CtripDalLogger</logger>
         <settings>
 			<encrypt>false</encrypt>
 			<simplified>true</simplified>
         </settings>
 	</LogListener>
 	<ConnectionLocator>
 		<settings>
 		 <serviceAddress></serviceAddress>
 	 <dataSourceConfigureProvider>com.ctrip.datasource.titan.TitanProvider</dataSourceConfigureProvider>
 		</settings>
 	</ConnectionLocator>
 	<TaskFactory>
 		<factory>com.ctrip.platform.dal.dao.CtripTaskFactory</factory>
 	</TaskFactory>
 </dal>

逻辑数据库和物理数据库映射

dal.xml和datasource.xml的关系

DAL组件配置

由于每个公司的实际情况各不相同,对监控或数据库配置可能有特殊要求,因此dal实现组件化设计,以实现组件的定制或扩展。

Dal已经提供了每个组件的缺省实现,如果没有特殊需求,code gen缺省生成的配置可以直接使用。无需更改。

DAL可以定制的组件为:

  1. DalLogger。记录DAL运行时相关信息。
  2. DalTaskFactory。细化CUD操作对应的逻辑。
  3. DalConnectionLocator。按照实际数据库标识获得连接。

每个组件的配置方式都类似。在Dal.config里面会有特定的节点和其对应。一般都是一个实现类名字加上其他配置信息。如果实现类名字未提供,系统会自动使用缺省实现。

Log配置

log相关配置在部分,如果没有logListener部分,DAL将不作任何log相关工作,其他功能照常。

logger的实现类

通过元素指定。如果没指定则使用缺省实现。说明见下文。

携程的特定实现

com.ctrip.platform.dal.sql.logging.CtripDalLogger。这个在code gen里面会自动生成出来,无需修改。该类内置了CLOG, CAT, MATRIX, TRACE相关的携程特定逻辑。

缺省实现

com.ctrip.platform.dal.dao.clien.DefaultLogger。该logger通过log4j打印log,同时支持所有CtripDalLogger支持的选项。

NULL实现

com.ctrip.platform.dal.dao.clien.NullLogger。实现logger的接口,但什么也不干。如果不希望打任何log, 可以配置为该类。

其他配置

如果用户提供的logger有特定的设置,可以在下面配置。下面的元素会按照元素名和包含的内容组成名值对来初始化logger。

示例

<LogListener enabled="true">
    <logger>com.ctrip.platform.dal.sql.logging.CtripDalLogger</logger>
    <settings>
      <encrypt>false</encrypt>
      <simplified>true</simplified>
    </settings>
</LogListener>

DalTaskFactory配置

DalTableDao内部使用一套通用框架来处理其API上的请求。该框架会把各个CURD操作包装为request,通过对应的Task来执行执行。这样做的目的是更好的提供升级和定制操作。例如携程内部针对Sql Server,使用特殊方法来实现CUD操作。通过配置TaskFactory即可以通过DalTableDao正常的CUD接口来完成,尽管底层实现可能与通常做法不一至。

要配置TaskFactory, 只需要在元素里面指明TaskFactory的实现类即可。

并且支持在settings里面配置异步操作的最大线程数目:maxPoolSize。系统默认值是50

<TaskFactory>
    <factory>com.ctrip.platform.dal.dao.CtripTaskFactory</factory>
    <settings>
       <maxPoolSize>100</maxPoolSize>
    </settings>
</TaskFactory>

其他配置

如果用户提供的TaskFactory有特定的设置,可以在下面配置。下面的元素会按照元素名和包含的内容组成名值对来初始化TaskFactory的特定实现。

ConnectionLocator配置

如果要配置locator,可在元素指定实现类。目前提供的缺省实现是com.ctrip.platform.dal.dao.datasource.DefaultDalConnectionLocator

该类支持配置dataSourceConfigureProvider。连接串解析器,缺省值为DefaultDataSourceConfigureProvider

<ConnectionLocator>
    <settings>
     <dataSourceConfigureProvider>com.ctrip.datasource.titan.TitanProvider</dataSourceConfigureProvider>
    </settings>
</ConnectionLocator>