Интеграция 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(PooledConnection.java:278) в org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) в org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701) в org.apache.tomcat.jdbc .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.creat ePool(DataSourceProxy.java:103) в org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127) в  ... (мои методы)

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

Что я делаю не так? Любые идеи?


person Inna    schedule 22.11.2016    source источник
comment
Вы пытались добавить Class.forName(com.mysql.jdbc.Driver)?   -  person evernat    schedule 22.01.2017


Ответы (1)


Класс net.bull.javamelody.JdbcDriver поддерживает получение свойства «драйвер» для создания прокси-соединения /javamelody/JdbcDriver.java#L75" rel="nofollow noreferrer">здесь. Я не сталкивался с жалобой «нет подходящего драйвера» с тем же кодом, что и вы, просто без ошибок, но не работает должным образом. Мои связи не учитывались.

Итак, я нашел все варианты использования в репозитории и, наконец, нашел этот тестовый код. Ниже приведен мой рабочий случай:

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. Он создает еще один объект пула, который проксирует исходные настройки пула и обрабатывает там подключение драйвера.

person tsohr    schedule 06.09.2018