Я использую приложение Java, которое подключается к DB2 через JDBC.Он создает соединение таким образом, чтобы имя приложения (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 set.
Когда код находится в Thread.sleep
, я запрашиваю db ...
select appl_name from sysibmadm.applications
where client_nname = '<my client ip>' with ur;
APPL_NAME
------------------
db2jcc_application
MyApplName
Как видите, у второго соединения правильно проставлена отметка имени приложения, но первое соединение просто имеет "db2jcc_application" в качестве имени.Но, конечно, я мог бы сделать это, только если бы я мог изменить код приложения - что я не могу.
Второй способ, который я нашел, что я могу сделать это, установив URL JDBC в настройках / свойствах приложения вособая мода.Вместо того, чтобы просто использовать JDBCURL=jdbc:db2://<ip>:<port>/<dbname>
в настройках приложения, если я установил JDBCURL=jdbc:db2://<ip>:<port>/<dbname>:clientProgramName=MyApplName;
, тогда имя приложения будет напечатано правильно.К сожалению, для определенных приложений, которые у нас есть, нам нужно запустить несколько процессов JVM, но я не могу установить вышеупомянутые настройки отдельно для каждого из этих процессов.Я могу установить параметры JVM (например, -D
параметры) отдельно для каждого процесса.
Таким образом, я смотрю, есть ли способ извне передать имя приложения, чтобыдрайвер JDBC подберет его и поставит отметку на соединении.