我有一个上面格式的context.xml文件
<Context shallowOutput="true" path="/">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
username="OMITTED"
password="OMITTED"
url="OMITTED"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
从这个contex.xml我需要获取我的Driver CLASS名称。
每次我尝试
DataSource ds = (DataSource)context.lookup("java:/jdbc/myDataSource")
并尝试使用
从连接中获取驱动程序类名称 ds.getConnection().getMetatData().getDriverName()
它正在回归 Oracle JDBC驱动程序 而不是类名 oracle.jdbc.driver.OracleDriver
如何从上下文中获取类名。
答案 0 :(得分:7)
我认为你能想到的最好的是:
DriverManager.getDriver(ds.getConnection().getMetaData().getURL()).getClass();
元数据应返回此连接的URL,并且URL前缀应使用DriverManager注册(唯一)。
答案 1 :(得分:3)
对于任何对象,您都可以使用object.getClass().getName()
对于JDBC连接,它看起来像:
String db_class = DriverManager.getConnection(db_url, usr, passwd).getClass().getName();
对于我的PostgreSQL驱动程序,它返回:
org.postgresql.jdbc4.Jdbc4Connection
在您的代码中,这应该有效:
ds.getConnection().getClass().getName()
显示连接类名的简单程序:
public static void show_connection_info(Connection conn)
{
System.out.println("Connection: " + conn);
System.out.println("Connection class: " + conn.getClass());
System.out.println("Connection class name: " + conn.getClass().getName());
}
对于我在测试中使用的Oracle连接:
Connection: oracle.jdbc.driver.T4CConnection@1e1c66a
Connection class: class oracle.jdbc.driver.T4CConnection
Connection class name: oracle.jdbc.driver.T4CConnection
答案 2 :(得分:0)
我使用基于反射的“尝试”算法。 OracleDataSource包含“driver”属性中的驱动程序,并且可能有许多DataSource执行相同操作。 以下是:
Field field = dataSource.getClass().getDeclaredField("driver");
field.setAccessible(true);
return field.get(dataSource).getClass().getName();
做好这份工作。
答案 3 :(得分:0)
使用Tomcat(7)可以正常工作:
if(source instanceof org.apache.tomcat.dbcp.dbcp.BasicDataSource){
logger.info("Driver className: "+((org.apache.tomcat.dbcp.dbcp.BasicDataSource)source).getDriverClassName());
}
您还需要在构建时包含dbcp库:
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-dbcp -->
<dependency><!-- to check driver name effectively running -->
<scope>provided</scope>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>7.0.47</version>
</dependency>