Интеграция JavaMelody в пул соединений Tomcat JDBC

Я пытаюсь интегрировать мониторинг JDBC в JavaMelody. Я использую пул соединений Tomcat jdbc. Моя установка выглядит так (упрощенно):

Properties props = new Properties();
props.setProperty("driver", "com.mysql.jdbc.Driver");

PoolConfiguration p = new PoolProperties();
p.setDriverClassName("net.bull.javamelody.JdbcDriver");
p.setDbProperties(props);
p.setUsername("myusername");
p.setPassword("mypassword");
p.setUrl(connectionParameters.getUrl());

org.apache.tomcat.jdbc.pool.DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource();

dataSource.setPoolProperties(p);

(Я предпочитаю эту настройку описанию в web.xml)

Я получаю следующее исключение

java.sql.SQLException: не найден подходящий драйвер для jdbc:mysql://127.0.0.1:3306/mydatabase?autoReconnect=true&characterEncoding=UTF-8 в java.sql.DriverManager.getConnection(DriverManager.java:596) в Java.sql.DriverManager.getConnection(DriverManager.java:187) по адресу net.bull.javamelody.JdbcDriver.connect(JdbcDriver.java:83) по адресу org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver:java в org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) в org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701) в org.apache.tomcat.jdc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635) в org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486) в org.apache.tomcat.jdbc.pool.ConnectionPool. (ConnectionPool. Java:144) в org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) в org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) в org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127) в... (мои методы)

Без javamelody работает нормально, javamelody работает нормально.

Что я делаю неправильно? Есть идеи?

1 ответ

Класс net.bull.javamelody.JdbcDriver поддерживает, чтобы получить свойство "драйвер" для создания прокси-соединения здесь. Я не сталкивался с жалобой "нет подходящего драйвера" с тем же кодом, который вы опубликовали, просто без ошибок, но он не работает, как ожидалось. Мои связи не были учтены.

Так что я нахожу любые варианты использования из репозитория и, наконец, я нашел этот тестовый код. Следующее - мой рабочий случай:

import javax.sql.DataSource;
import net.bull.javamelody.JdbcWrapper;

PoolProperties p = new PoolProperties();
p.setDefaultTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
p.setDriverClassName("org.postgresql.Driver");
p.setUrl(getLoginUrl());

org.apache.tomcat.jdbc.pool.DataSource orgDataSource = new org.apache.tomcat.jdbc.pool.DataSource();
orgDataSource.setPoolProperties(p);

DriverManager.registerDriver(new net.bull.javamelody.JdbcDriver());
datasource = JdbcWrapper.SINGLETON.createDataSourceProxy(app_name, orgDataSource);

Хитрость в этом коде JDBC wrapper.SINGLETON.createDataSourceProxy, Он создает еще один объект пула, который проксирует исходные настройки пула и обрабатывает там соединение с драйвером.

Другие вопросы по тегам