-
Notifications
You must be signed in to change notification settings - Fork 447
Java客户端 配置与扩展
dal.xml是DAL的核心配置文件,包括两大部分内容。
- 逻辑数据库和物理数据库如何映射的配置文件。
- 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实现组件化设计,以实现组件的定制或扩展。
Dal已经提供了每个组件的缺省实现,如果没有特殊需求,code gen缺省生成的配置可以直接使用。无需更改。
DAL可以定制的组件为:
- DalLogger。记录DAL运行时相关信息。
- DalTaskFactory。细化CUD操作对应的逻辑。
- DalConnectionLocator。按照实际数据库标识获得连接。
每个组件的配置方式都类似。在Dal.config里面会有特定的节点和其对应。一般都是一个实现类名字加上其他配置信息。如果实现类名字未提供,系统会自动使用缺省实现。
log相关配置在部分,如果没有logListener部分,DAL将不作任何log相关工作,其他功能照常。
通过元素指定。如果没指定则使用缺省实现。说明见下文。
com.ctrip.platform.dal.sql.logging.CtripDalLogger。这个在code gen里面会自动生成出来,无需修改。该类内置了CLOG, CAT, MATRIX, TRACE相关的携程特定逻辑。
com.ctrip.platform.dal.dao.clien.DefaultLogger。该logger通过log4j打印log,同时支持所有CtripDalLogger支持的选项。
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>
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的特定实现。
如果要配置locator,可在元素指定实现类。目前提供的缺省实现是com.ctrip.platform.dal.dao.datasource.DefaultDalConnectionLocator
该类支持配置dataSourceConfigureProvider。连接串解析器,缺省值为DefaultDataSourceConfigureProvider
<ConnectionLocator>
<settings>
<dataSourceConfigureProvider>com.ctrip.datasource.titan.TitanProvider</dataSourceConfigureProvider>
</settings>
</ConnectionLocator>