全部产品

配置连接器

更新时间:2020-10-03 10:46:22

本文介绍如何在现有的应用工程中配置数据访问代理连接器。

操作步骤

注意:下列各步骤中的配置仅供参考,您需要根据实际情况进行必要的修改。

1、在工程根目录的 pom.xml 文件中,根据需要添加以下 Maven 依赖:

  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>dbp-connector-java</artifactId>
  4. <version>1.0.9</version>
  5. </dependency>

2、在 Spring 配置文件中,增加连接器配置和数据源连接池 bean,如下所示:

  1. <!-- 增加连接器配置 –->
  2. <bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
  3. <property name="delegate" ref="simpleDataSource"/>
  4. <property name="dbpInstanceId" value="${yourODPInstanceId}"/>
  5. <property name="appName" value="${yourAppName}"/>
  6. <property name="database" value="${yourDatabaseName}"/>
  7. </bean>
  8. <!-- 连接器配置结束 –->
  9. <!-- 数据源连接池配置 -->
  10. <bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
  11. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  12. <!-- ODP实例地址,形如sofaodpojiss8o73o5la.sofaodp.aliyuncs.com -->
  13. <property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
  14. <property name="username" value="${user}"/>
  15. <property name="password" value="${password}"/>
  16. </bean>
  17. <!-- 数据源连接池配置结束 –->

密码解密


数据库密码是比较敏感的信息,在配置文件中推荐使用加密后的密文提高安全性;dbp-connector 中提供了 SecuritySpec 接口实现密码的加解密的功能,您需要实现这个接口自定义加解密的算法。

  1. <!-- 增加连接器配置 –->
  2. <bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
  3. <property name="delegate" ref="simpleDataSource"/>
  4. <property name="dbpInstanceId" value="${yourODPInstanceId}"/>
  5. <property name="appName" value="${yourAppName}"/>
  6. <property name="database" value="${yourDatabaseName}"/>
  7. <!-- 增加密码解密配置 –->
  8. <property name="securitySpec" ref="securitySpecImpl"/>
  9. </bean>
  10. <!-- 连接器配置结束 –->
  11. <!-- 数据源连接池配置 -->
  12. <bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
  15. <property name="username" value="${user}"/>
  16. <property name="password" value="${password}"/>
  17. </bean>
  18. <!-- 数据源连接池配置结束 –->
  19. <!-- 自定义密码解密实现,实现接口 com.alipay.sofa.extds.SecuritySpec-->
  20. <bean id="securitySpecImpl" class="x.x.x.SecuritySpecImpl"/>
  21. <!-- 密码解密结束-->


支持 SQL 链路追踪

dbp-connector 支持 SQL 链路追踪功能,dbp-connector 会将 traceId 通过 mysql 的自定义 HINT 语法传给 dbpserver,从而打通应用到 dbpserver 的链路,方便通过链路追踪应用快速定位 SQL 执行耗时。

HINT语法格式如下:

  1. /*+DBP: $SYS={TRACE(0a0fe91c1514974353459100919649#0.1)}*/select * from test


HINT语法格式说明:

  1. /*+DBP: $SYS={TRACE(TraceId#RpcId)}*/select * from test


dbp-connector 会将 SQL 执行信息包括 trace 信息打印在本地日志 sql-digest.log 中。默认情况下,执行时间小于 3ms 且执行成功的 SQL 按照 10/1 的比例抽样打印;执行失败和执行时间大于 3ms 的 SQL 全量打印。

日志格式如下:

  1. 2018-06-20 23:42:10.280,testApp,0a4192811529509329989100469009,0.1,testDbpInstanceId,dbpclient_db,select * from mars,success,289ms,274ms,15ms,DBP,11.239.141.253:8306,main


日志格式说明:

  1. 日志打印时间,AppName,TraceId,RpcId,DBP,dbp实例id,schema,SQL,执行结果(success/failed),执行耗时(ms),链接建立时间,数据库执行时间,DBP,dbp实例Ip,当前线程名
  1. <!-- 增加连接器配置 –->
  2. <bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
  3. <property name="delegate" ref="simpleDataSource"/>
  4. <property name="dbpInstanceId" value="${yourODPInstanceId}"/>
  5. <property name="appName" value="${yourAppName}"/>
  6. <property name="database" value="${yourDatabaseName}"/>
  7. <!-- 增加链路追踪配置 –->
  8. <property name="clientTracer" ref="clientTracer"/>
  9. </bean>
  10. <!-- 连接器配置结束 –->
  11. <!-- 数据源连接池配置 -->
  12. <bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
  13. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://${yourODPConnectionURL}:8306/${yourDatabaseName}"/>
  15. <property name="username" value="${user}"/>
  16. <property name="password" value="${password}"/>
  17. </bean>
  18. <!-- 数据源连接池配置结束 –->
  19. <bean id="clientTracer" class="com.alipay.sofa.dbp.DbpClientTracer">
  20. <!-- 设置客户端日志才样的阈值,默认3ms(3ms内成功的sql按10%采样),设置为0 全部打印 -->
  21. <property name="sampleThreshold" value="3"/>
  22. </bean>

阿里云双机房配置


要求 dbp-connector 的版本号为 1.1.1 及以上
ODP 阿里云实例的域名格式为:阿里云 ODP 实例 ID(去掉中划线)+zone 按中划线分割的最后一部分.[public.]sofaodp.aliyuncs.com,如 sofaodpojiss8o73o5la.sofaodp.aliyuncs.com

  1. <!-- 增加连接器配置 –->
  2. <bean id="simpleDataSourceConnector" class="com.alipay.sofa.dbp.DbpDataSource" init-method="init">
  3. <property name="delegate" ref="simpleDataSource"/>
  4. <property name="dbpInstanceId" value="${yourODPInstanceId}"/>
  5. <property name="appName" value="${yourAppName}"/>
  6. <property name="database" value="${yourDatabaseName}"/>
  7. </bean>
  8. <!-- 连接器配置结束 –->
  9. <!-- 数据源连接池配置 -->
  10. <bean id="simpleDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
  11. <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  12. <!-- 形如jdbc:mysql://sofaodp-ojiss8o73o5l@zone@.[public.]sofaodp.aliyuncs.com:8306/testdb -->
  13. <property name="url" value="jdbc:mysql://${yourODPInstanceId}@zone@.sofaodp.aliyuncs.com:8306/${yourDatabaseName}"/>
  14. <property name="username" value="${user}"/>
  15. <property name="password" value="${password}"/>
  16. </bean>
  17. <!-- 数据源连接池配置结束 –->