В Java с MySQL мы хотим добавить jdb c ClientInfo, чтобы определить источник каждого запроса. В настоящее время мы можем сделать что-то вроде:
try(Connection connection = dataSource.getConnection()){
connection.setClientInfo("ApplicationName", "MyApp");
}
Но мне нужно добавить его к каждому созданному соединению и означает проверку всего исходного кода на наличие мест, где создается новое соединение. Я хотел бы установить его на уровне источника данных.
До сих пор у меня работает расширение DataSource с помощью пользовательского переопределенного метода getConnection, который вызывает setClientInfo. Это не только грязный обходной путь, но и спецификация источника данных c.
Я видел, что драйвер mysql имеет ClientInfoProviders , как по умолчанию com. mysql .cj.jdb c .CommentClientInfoProvider . Пользовательский ClientInfoProvider может быть настроен следующим образом:
Properties properties = new Properties();
properties.setProperty(PropertyKey.clientInfoProvider.getKeyName(), "foo.bar.CustomClientInfoProvider");
properties.setProperty(APPLICATION_NAME, "MyApp");
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDataSourceProperties(properties);
...
Но он вызывается только в том случае, если кто-то вызывает getClientInfo в соединении в любом случае.
Итак, я хотел бы знать:
- Есть ли поддержка в драйвере MySql для установки clientInfo в DataSource просто путем установки свойств?
- Если есть выход. Как это можно сделать?