使用DriverManager类设置jdbc拦截器

问题描述

我正在使用DriverManager.getConnection(url,prop)来建立连接。我正在尝试使用类似下面的属性注入jdbc拦截器,但是它不起作用。

Properties prop = new Properties();
...
prop.setProperty("jdbcInterceptors","com.amazonaws.xray.sql.MysqL.TracingInterceptor;");

但是,当我们尝试通过数据源进行操作时,它正在起作用。

import org.apache.tomcat.jdbc.pool.DataSource;
DataSource source = new DataSource();
source.setUrl("url");
source.setUsername("user");
source.setPassword("password");
source.setDriverClassName("com.MysqL.jdbc.Driver");
source.setJdbcInterceptors("com.amazonaws.xray.sql.MysqL.TracingInterceptor;");

不确定DriverManager属性有什么问题。

解决方法

这些拦截器是Tomcat org.apache.tomcat.jdbc.pool.DataSourceProxy及其子类org.apache.tomcat.jdbc.pool.DataSource的功能。这不是JDBC本身的功能,也不是您正在使用的JDBC驱动程序的功能,因此访问它的唯一方法是通过Tomcat数据源。

简而言之,它不适用于DriverManager,因为DriverManager中不存在此功能。