我正在使用通过JDBC连接到DB2的Java应用程序。它创建连接,以使应用程序名称(sysibmadm.applications-> APPL_NAME)保持JDBC的默认“ db2jcc_application”。有没有办法外部将APPL_NAME设置为所需值? (例如,在Oracle中,我可以通过-Doracle.jdbc.v$session.program=MyApplName
来达到类似的效果)。
我想这样做,以便可以清楚地识别进入DB2的所有连接。当前,所有Java应用程序都显示为“ db2jcc_application”。
我写了一小段代码来说明这一点...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DB2ApplName {
public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
Class.forName("com.ibm.db2.jcc.DB2Driver");
Properties connProps = new Properties();
connProps.put("user", "<my db2 user>");
connProps.put("password", "<my db2 password>");
// Create a connection **WITHOUT** Application Name
Connection connWithoutApplName = DriverManager.getConnection("jdbc:db2://<ip>:<port>/<dbname>",
connProps);
// Add Application Name to the properties
connProps.put("clientProgramName", "MyApplName");
// Create a connection **WITH** Application Name
Connection connWithApplName = DriverManager.getConnection("jdbc:db2://<ip>:<port>/<dbname>",
connProps);
System.out.println("Sleeping for 60 seconds - check the connections.");
Thread.sleep(60000L); // During this time I will run query on DB2 to see connection details.
connWithoutApplName.close();
connWithApplName.close();
}
}
此代码创建两个连接,一个设置为没有 ApplName,另一个设置为带有 ApplName。
当代码位于Thread.sleep
中时,我查询数据库...
select appl_name from sysibmadm.applications
where client_nname = '<my client ip>' with ur;
APPL_NAME
------------------
db2jcc_application
MyApplName
如您所见,第二个连接正确地标记了应用程序名称,但是第一个连接仅以“ db2jcc_application”作为名称。但是,当然,只有在我可以修改应用程序代码的情况下,我才能这样做。
我发现的第二种方法是通过以特殊方式在应用程序设置/属性中设置JDBC URL。如果我设置了JDBCURL=jdbc:db2://<ip>:<port>/<dbname>
,则不是在应用程序设置中简单地使用JDBCURL=jdbc:db2://<ip>:<port>/<dbname>:clientProgramName=MyApplName;
,而是正确地标记了应用程序名称。不幸的是,对于我们拥有的某些应用程序,我们需要启动多个JVM进程,但是我不能为每个进程分别设置上述设置。我可以为每个进程分别设置JVM参数(例如-D
参数)。
因此,我正在寻找是否有一种方法外部传递应用程序名称,以便JDBC驱动程序将其拾取并在连接上标记。
答案 0 :(得分:0)
以下是可用属性的列表,可以通过JVM参数或属性文件进行设置:
IBM Data Server Driver for JDBC and SQLJ configuration properties。
根据此链接,您不能以这种方式设置clientProgramName
属性。