本文介绍如何在现有的应用工程中配置数据访问代理连接器。
操作步骤
注意:下列各步骤中的配置仅供参考,您需要根据实际情况进行必要的修改。
1、在工程根目录的 pom.xml
文件中,根据需要添加以下 Maven 依赖:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>dbp-connector-java</artifactId>
<version>1.0.9</version>
</dependency>
2、在 Spring 配置文件中,增加连接器配置和数据源连接池 bean,如下所示:
<!-- 增加连接器配置 –->
<bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
<property name="delegate" ref="simpleDataSource"/>
<property name="dbpInstanceId" value="${yourODPInstanceId}"/>
<property name="appName" value="${yourAppName}"/>
<property name="database" value="${yourDatabaseName}"/>
</bean>
<!-- 连接器配置结束 –->
<!-- 数据源连接池配置 -->
<bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<!-- ODP实例地址,形如sofaodpojiss8o73o5la.sofaodp.aliyuncs.com -->
<property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 数据源连接池配置结束 –->
密码解密
数据库密码是比较敏感的信息,在配置文件中推荐使用加密后的密文提高安全性;dbp-connector 中提供了 SecuritySpec 接口实现密码的加解密的功能,您需要实现这个接口自定义加解密的算法。
<!-- 增加连接器配置 –->
<bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
<property name="delegate" ref="simpleDataSource"/>
<property name="dbpInstanceId" value="${yourODPInstanceId}"/>
<property name="appName" value="${yourAppName}"/>
<property name="database" value="${yourDatabaseName}"/>
<!-- 增加密码解密配置 –->
<property name="securitySpec" ref="securitySpecImpl"/>
</bean>
<!-- 连接器配置结束 –->
<!-- 数据源连接池配置 -->
<bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 数据源连接池配置结束 –->
<!-- 自定义密码解密实现,实现接口 com.alipay.sofa.extds.SecuritySpec-->
<bean id="securitySpecImpl" class="x.x.x.SecuritySpecImpl"/>
<!-- 密码解密结束-->
支持 SQL 链路追踪
dbp-connector 支持 SQL 链路追踪功能,dbp-connector 会将 traceId 通过 MySQL 的自定义 HINT 语法传给 dbpserver,从而打通应用到 dbpserver 的链路,方便通过链路追踪应用快速定位 SQL 执行耗时。
HINT语法格式如下:
/*+DBP: $SYS={TRACE(0a0fe91c1514974353459100919649#0.1)}*/select * from test
HINT语法格式说明:
/*+DBP: $SYS={TRACE(TraceId#RpcId)}*/select * from test
dbp-connector 会将 SQL 执行信息包括 trace 信息打印在本地日志 sql-digest.log
中。默认情况下,执行时间小于 3ms 且执行成功的 SQL 按照 10/1 的比例抽样打印;执行失败和执行时间大于 3ms 的 SQL 全量打印。
日志格式如下:
2018-06-2023:42:10.280,testApp,0a4192811529509329989100469009,0.1,testDbpInstanceId,dbpclient_db,select*from mars,success,289ms,274ms,15ms,DBP,11.239.141.253:8306,main
日志格式说明:
日志打印时间,AppName,TraceId,RpcId,DBP,dbp实例id,schema,SQL,执行结果(success/failed),执行耗时(ms),链接建立时间,数据库执行时间,DBP,dbp实例Ip,当前线程名
<!-- 增加连接器配置 –->
<bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
<property name="delegate" ref="simpleDataSource"/>
<property name="dbpInstanceId" value="${yourODPInstanceId}"/>
<property name="appName" value="${yourAppName}"/>
<property name="database" value="${yourDatabaseName}"/>
<!-- 增加链路追踪配置 –->
<property name="clientTracer" ref="clientTracer"/>
</bean>
<!-- 连接器配置结束 –->
<!-- 数据源连接池配置 -->
<bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 数据源连接池配置结束 –->
<bean id="clientTracer" class="com.alipay.sofa.dbp.DbpClientTracer">
<!-- 设置客户端日志才样的阈值,默认3ms(3ms内成功的sql按10%采样),设置为0 全部打印 -->
<property name="sampleThreshold" value="3"/>
</bean>
阿里云双机房配置
要求 dbp-connector 的版本号为 1.1.1 及以上。ODP 阿里云实例的域名格式为:阿里云 ODP 实例 ID(去掉中划线)+zone 按中划线分割的最后一部分.[public.]sofaodp.aliyuncs.com
,如 sofaodpojiss8o73o5la.sofaodp.aliyuncs.com
。
<!-- 增加连接器配置 –->
<bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
<property name="delegate" ref="simpleDataSource"/>
<property name="dbpInstanceId" value="${yourODPInstanceId}"/>
<property name="appName" value="${yourAppName}"/>
<property name="database" value="${yourDatabaseName}"/>
</bean>
<!-- 连接器配置结束 –->
<!-- 数据源连接池配置 -->
<bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<!-- 形如jdbc:mysql://sofaodp-ojiss8o73o5l@zone@.[public.]sofaodp.aliyuncs.com:8306/testdb -->
<property name="url" value="jdbc:mysql://${yourODPInstanceId}@zone@.sofaodp.aliyuncs.com:8306/${yourDatabaseName}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 数据源连接池配置结束 –->
专有云双机房配置
修改 Spring 配置文件如下:
<!-- vip寻址-->
<bean id="dbpDiscovery" class="com.alipay.sofa.dbp.discovery.DbpDiscovery"/>
<!-- dbp-connector代理-->
<bean id="delegatingDataSource" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
<property name="delegate" ref="simpleDataSource"/>
<property name="appName" value="${yourAppName}"/>
<property name="database" value="${yourDatabase}"/>
<property name="dbpInstanceId" value="${yourDbpInstanceId}"/>
<property name="clientTracer" ref="clientTracer"/>
</bean>
<!-- 连接池配置,以druid为例 -->
<bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://${yourDbpInstanceId}:8306/${yourDatabase}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<bean id="clientTracer" class="com.alipay.sofa.dbp.DbpClientTracer"/>
文档内容是否对您有帮助?