JavaMelody集成在tomcat jdbc连接池中

时间:2016-11-22 21:43:28

标签: tomcat jdbc java-melody

我正在尝试在JavaMelody中集成JDBC Monitoring。 我使用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中的< context>描述中进行此设置)

我得到以下异常

  

java.sql.SQLException:找不到合适的驱动程序   JDBC:MySQL的://127.0.0.1:3306 / MyDatabase的autoReconnect的=真安培;的characterEncoding = UTF-8   在java.sql.DriverManager.getConnection(DriverManager.java:596)at   java.sql.DriverManager.getConnection(DriverManager.java:187)at   net.bull.javamelody.JdbcDriver.connect(JdbcDriver.java:83)at   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.createPool(DataSourceProxy.java:103)   在   org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127)   在...(我的方法)

如果没有javamelody它运行正常,javamelody一般运行正常。

我做错了什么?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

net.bull.javamelody.JdbcDriver支持获取“驱动程序”属性来创建代理连接here。我没有遇到与您发布的代码相同的“没有合适的驱动程序”的抱怨,只是没有错误,但没有按预期工作。我的联系不算在内。

因此,我从存储库中找到了所有用例,最后,我发现了this test code。以下是我的工作案例:

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。它创建另一个池对象,该对象代理原始池设置并在那里处理驱动程序连接。