【问题标题】:setClientProgramName in DataSource数据源中的 setClientProgramName
【发布时间】:2023-08-04 05:04:01
【问题描述】:

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");

因为我想看

MyApplication in APPLICATION_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>

【问题讨论】:

  • 请编辑您的问题以指定您正在使用的 db2jcc*.jar 的确切版本,以及 DB2 服务器上 db2level 命令的纯文本输出。当前版本支持连接属性 ApplicationName 字符串(最多 255 个字符)
  • db2level: command not found `` `` db2ls Install Path Level Fix Pack Special Install Number Install Date Installer UID -------------------- -------------------------------------------------- ----------------------------------------------------------- /opt/ xxx/db2/V11.1 11.1.1.1 1 周五 8 月 23 日 xx:xx:xx 2019 CEST 0

标签: java db2 datasource tomcat9 db2-luw


【解决方案1】:

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

ApplicationName
ClientAccountingInformation
ClientHostname
ClientUser

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

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

【讨论】:

  • 它没有设置APPLICATION_NAME,而是设置CLIENT_APPLNAME,这也很好。谢谢