Skip to content

Java客户端 集成说明

He, Jiehui edited this page Nov 17, 2017 · 19 revisions

简介

DAL提供代码生成器来生成DAO代码和相应的配置文件。如非必要请不要通过调用DAL的API来试图编写自己的DAO。请先通过生成器创建DAO。目前代码生成器支持标准,构建和自定义DAO,可以满足所有需求。

总体而言只要把生成的代码和配置拷贝到项目里面就可以了。

生成DAO和配置文件后,请按照下面的步骤依次完成开发环境的构建

  1. 获取Dal Client
  2. 添加Dal Client 依赖
  3. 复制配置文件
  4. 编译打包
  5. 初始化

开发和部署中常见问题可以参考常见问题

初次使用DAL可以先试运行下面提供的demo project以对一个完整的应用建立初步的认识。

更多信息可以参考 功能简介, 数据库分片,数据库事务等文档。

获取Dal Client

你可以通过如下3种方式获得Dal client

  1. 直接下载
  2. 手工安装
  3. 从原代码打包

直接下载

添加下列的repository在pom.xml,或者settings.xml里面。

<repositories>
    <repository>
        <id>dal-repo</id>
        <url>https://raw.github.com/ctripcorp/dal/mvn-repo/</url>
        <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </snapshots>
    </repository>
</repositories>

常见问题

如果不能下载下来,请注释掉settings.xml里面的proxy试试。或者尝试手工安装或从源代码生成

手工安装

从最新的dal client relase目录下载dal client对应的文件,手工安装到本地或公司的nexus仓库

最新正式版本 1.13.1

以1.5.0版本为例,假定copy到本地D:\dal目录下,depoly到公司的nexus repo参考命令如下

mvn deploy:deploy-file -DpomFile=D:\dal\pom.xml -Dfile=D:\dal\dal-client-1.5.0.jar -Dsources=D:\dal\dal-client-1.5.0-sources.jar -Djavadoc=D:\dal\dal-client-1.5.0-javadoc.jar -Durl=http://yourcorp.com:8081/nexus/content/repositories/release/ -DrepositoryId=nexus-releases

Install到本地repo的参考命令如下:

mvn install:install-file -DpomFile=D:\dal\pom.xml -Dfile=D:\dal\dal-client-1.5.0.jar

从源代码生成

下载dal client的原代码,直接mvn install即可。如果缺乏需要的依赖,请参考下面的安装依赖部分。

部署可以参考上面的命令,或者修改这个部署dal-client模板。这个命令假设pom在项目根目录,生成的结果在target目录

注意

  1. DAL的编译依赖javax.servlet和javax.servlet-api,如果没有请看下面的安装介绍
  2. DAL已经包含了对稳定版本SqlServer,Mysql和oracle驱动jar的引用,请用户不要自行引用其他版本的驱动
  3. DAL使用tomcat-jdbc 7.0.52版本,请不要自己额外配置该依赖,以免发生冲突而产生问题

安装依赖

DAL依赖一些第三方库。如果用户缺乏相关依赖,可能会导致无法编译或运行。例如MS Sqlserver的依赖很多公司可能就没有。用户可以自行搜索并安装到本地或公司的nexus repo。为了方便大家使用,我们对用到的部分容易缺失的依赖提供备份:

依赖目录

下面以Microsoft JDBC Drivers为例介绍如何安装依赖,其他依赖可以按照同样做法安装:

首先获得依赖文件。用户可以直接去微软网站下载4.0.2206版本

Microsoft JDBC Drivers 6.0, 4.2, 4.1, and 4.0 for SQL Server

也可以使用DAL提供的备份版本:

sqljdbc-4.0.2206.jar

sqljdbc-4.0.2206.pom

假定copy到本地D:\目录下,deploy到公司repo的参考命令如下

mvn deploy:deploy-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc -Dversion=4.0.2206 -Dpackaging=jar -Dfile=d:\sqljdbc-4.0.2206.jar -DrepositoryId=your-nexus-releases-repo -Durl=http://yourcorp.com:8081/nexus/content/repositories/yourreleaserepo

Oracle驱动的备份 安装命令参考:

mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4 -Dpackaging=jar -Dfile=d:\drivers\ojdbc6_11.2.0.4.jar -DrepositoryId=your-nexus-releases-repo -Durl=http://yourcorp.com:8081/nexus/content/repositories/yourreleaserepo

Install到本地repo的命令如下:

mvn install:install-file -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc -Dversion=4.0.2206 -Dpackaging=jar -Dfile=d:\sqljdbc-4.0.2206.jar

添加DAL Client 依赖

请注意选择和本地编译或下载版本一致的版本号

<dependency>
    <groupId>com.ctrip.platform</groupId>
    <artifactId>dal-client</artifactId>
    <version>1.13.1</version>
</dependency>

复制配置文件

将所有生成的dal.xml, datasource.xml copy到项目的resource目录。

编译打包

dal是基于maven的工具,mvn compile即可编译。

Dal初始化

懒加载

Dal支持懒加载,可以在第一次调用dao的时候自动初始化系统。初始化会花时间校验配置,组装系统,初始化数据库连接池,所以可能会有些耗时。

主动加载

如果希望在应用启动的时候初始化,请单独调用DalClientFactory.initClientFactory()。

预热连接池

如果希望预热连接池,可以调用DalClientFactory.warmUpConnections(),该调用会主动调用DalClientFactory.initClientFactory()。所以无需再次单独调用

如果是独立程序,可以按照上面的说明选择需要的初始化方式。

Web应用加载配置

针对web应用,dal提供了缺省的servlet listener完成系统的初始化,校验配置项和初始化连接池。通过在Web.xml里面配置servlet listener可以避免额外写初始化代码。

配置servlet listener

<listener>
    <listener-class>com.ctrip.platform.dal.dao.helper.DalClientFactoryListener</listener-class>
</listener>

自定义Dal.config位置

如果dal.xml在应用的缺省classpath里面。无需任何配置。特殊情况下,如果dal.xml不在classpath,可以通过context-param在web.xml里面指定 com.ctrip.platform.dal.dao.DalConfigPath e:/Dal.config

预热连接池

开启Dal Java Client Factory的warm up功能,预热所有连接。 不设或者设置成false表示不开启,连接池再实际产生数据库操作的时候懒加载

<context-param>
    <param-name>com.ctrip.platform.dal.dao.DalWarmUp</param-name>
    <param-value>true</param-value>
</context-param>

常见问题

MySql需要支持utf8mb4

mysql数据库在接收使用utf8mb4的时候报错:

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x9C\xE3\x80...'

当前的DAL客户端已经支持utf8mb4,但数据库方面需要修改字符集。请参考mysql相关文档

设置超时

在datasource.xml里面设置removeAbandonedTimeout:超时设置,单位秒

或者针对特定的dao方法可以调用DalHInts.timeout(second)

数据库规范

以下是携程数据库使用规范的简介,供参考

  1. 每张表都必须保护自增长的主键
  2. 禁止建立表之间的主外键关联
  3. 严格控制多表join操作,尽量用单表查询
  4. 每张表都必须保护标明最后更新时间的字段

Demo project

Demo projec可以查看基于mysql数据库生成的dao代码。该demo基于两个数据库,每个数据库里面包含4张表。project里面的sharding设置是两个库按mod 2来路由,4张表按照mod 4来路由。

  1. 下载demo project
  2. 在resources目录下面找到dbsetup.sql,复制到mysql的客户端里面执行
  3. 修改datasource.xml,将里面的连接串,用户名,密码修改为你的数据库
  4. 运行test下面的AllTests

注意事项

  1. 尽量使用code gen生成的代码
  2. 避免自己去写代码调用dal的api,就算比较清楚如何使用
  3. 这样做的原因是为了保证向后兼容和code gen与dal各种演化的灵活性
Clone this wiki locally