数据源中的 setClientProgramName

setClientProgramName in DataSource

tomcat9中有一个设置在context.xml中:

<Resource name="jdbc/db2xx"         auth="Container"    
    type="javax.sql.DataSource"     driverClassName="com.ibm.db2.jcc.DB2Driver" 
    maxTotal="100"                  maxIdle="30"      
    maxWaitMillis="-1"              username="xx" password="xx"         
    url="jdbc:db2://xxxx:xxx/dbname;" />

Java中是:

    try {
        Class.forName("com.ibm.db2.jcc.DB2SimpleDataSource");
        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        com.ibm.db2.jcc.DB2SimpleDataSource ds = (com.ibm.db2.jcc.DB2SimpleDataSource) envContext.lookup("jdbc/db2xx");
        ds.setClientProgramName("MyApplication");
        conn = ds.getConnection();
    }

但是我得到错误:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource cannot be cast to com.ibm.db2.jcc.DB2SimpleDataSource

我必须改变吗

org.apache.tomcat.dbcp.dbcp2.BasicDataSource

在哪里? 重点是

ds.setClientProgramName("MyApplication");

因为我想看

MyApplicationAPPLICATION_NAME

当我运行

SELECT APPLICATION_NAME FROM TABLE(MON_GET_CONNECTION(CAST(NULL AS BIGINT),-2))

或者还有其他方法吗?

如果我使用 javax.sql.DataSource 程序可以,但我不能使用 setClientProgramName

在 maven pom 中:

    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>jcc</artifactId>
        <version>11.5.7.0</version>
    </dependency>

Client info properties support by the IBM Data Server Driver for JDBC and SQLJ.

ApplicationName
ClientAccountingInformation
ClientHostname
ClientUser

上面link中提到的这些属性不能用URL设置。
它们可以使用 JDBC 4 方法设置(使用 db2jcc4.jar,而不是 db2jcc.jar,后者是 JDBC 3 的实现) setClientInfo only 如下所示:

conn = ds.getConnection();
conn.setClientInfo("ApplicationName", "MyApplication");