如何在运行时从连接池声明中获取用户名
How to get username from connection pool declaration at runtime
我的连接池在 tomcat 服务器的 context.xml 中声明如下:
<Resource name="jdbc/codesign" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@abc.fjd.com"
username="tiger" password="tiger123" maxActive="30" maxIdle="10"
poolPreparedStatements="true" maxOpenPreparedStatements="100"
validationQuery="SELECT SYSDATE FROM DUAL" maxWait="10000"/>
我正在以通常的方式初始化数据源:
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
ds = (DataSource) envContext.lookup("jdbc/codesign");
我想要的是在运行时访问用户名(在本例中为 "tiger")。我在 javax.sql.DataSource
class 中没有看到任何此类方法。当我尝试使用
从连接中获取模式时
Connection conn = DataSourceConnectionPool.getConnection()
conn.getSchema();
我收到以下错误:
java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getSchema()
如果先打开连接,我会得到同样的错误:
conn.unwrap(OracleConnection.class).getSchema()
java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection.getSchema()
是否有从数据源或连接中获取架构名称或用户名的方法?
如果您正在使用 Tomcat,您的 DataSoruce 实现很可能是 BasicDataSource https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.html
您可以将 ds 转换为 BasicDataSource,并通过 getUsername() 访问用户。
当然,首先要尝试打印 db.getClass().getName() 以查看实际执行情况。
我的连接池在 tomcat 服务器的 context.xml 中声明如下:
<Resource name="jdbc/codesign" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@abc.fjd.com"
username="tiger" password="tiger123" maxActive="30" maxIdle="10"
poolPreparedStatements="true" maxOpenPreparedStatements="100"
validationQuery="SELECT SYSDATE FROM DUAL" maxWait="10000"/>
我正在以通常的方式初始化数据源:
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
ds = (DataSource) envContext.lookup("jdbc/codesign");
我想要的是在运行时访问用户名(在本例中为 "tiger")。我在 javax.sql.DataSource
class 中没有看到任何此类方法。当我尝试使用
Connection conn = DataSourceConnectionPool.getConnection()
conn.getSchema();
我收到以下错误:
java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getSchema()
如果先打开连接,我会得到同样的错误:
conn.unwrap(OracleConnection.class).getSchema()
java.lang.AbstractMethodError: oracle.jdbc.driver.OracleConnection.getSchema()
是否有从数据源或连接中获取架构名称或用户名的方法?
如果您正在使用 Tomcat,您的 DataSoruce 实现很可能是 BasicDataSource https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/tomcat/dbcp/dbcp2/BasicDataSource.html
您可以将 ds 转换为 BasicDataSource,并通过 getUsername() 访问用户。
当然,首先要尝试打印 db.getClass().getName() 以查看实际执行情况。