繁体   English   中英

无法在 Java + MySQL + Vibur-dbcp 中创建连接池

[英]Unable to create a connection pool in Java + MySQL + Vibur-dbcp

我正在尝试为 JavaFX 中的桌面应用程序创建一个连接池 whit vibur-dbcp,我在 AWS 中有一个 MySQL 数据库,当我从 Workbench 连接时效果很好,当我从应用程序连接时,响应时间增加,我检查我的代码和原因是因为该应用程序创建了许多连接,从而导致过热(首先该应用程序具有嵌入式 SQLite 数据库并且连接不是问题)我重新制作了代码对接的结构我仍然需要进行很多连接.

寻找解决方案我发现连接池就是这样,我找到了很多解决方案 Apache commons、C3P0、HikariCP 和 Vibur DBCP 我尝试使用所有解决方案,但目前我无法使一个工作,我正在寻找一个教程,但我只能找到 servlet 的旧实现(Java 6 或更早版本),并且只能找到片段,所有这些对我来说都非常令人困惑(我是 DB 的初学者),我最喜欢的选项是 HikariCP,但我可以使池工作,我的下一个选项是 Vibur,目前我有这个连接代码。

private Connection connection;

//creates the pool
public DataSource createDataSourceWithStatementsCache() {
 ViburDBCPDataSource ds = new ViburDBCPDataSource();

 ds.setJdbcUrl("dbURL");
 ds.setUsername("dbUser");
 ds.setPassword("dbPass");

 ds.setPoolInitialSize(10);
 ds.setPoolMaxSize(100);

 ds.setConnectionIdleLimitInSeconds(30);
 ds.setTestConnectionQuery("isValid");

 ds.setLogQueryExecutionLongerThanMs(500);
 ds.setLogStackTraceForLongQueryExecution(true);

 ds.setStatementCacheMaxSize(200);

 ds.start();
 return ds;
}

//Getts the conection
public Connection conectarBD(){
    try {
        connection = createDataSourceWithStatementsCache().getConnection();
    } catch (SQLException ex) {
        Logger.getLogger(coneccionBD.class.getName()).log(Level.SEVERE, null, ex);
    }
   return connection;
}


public void desconectarBD(){
    try {
        connection.close();
    } catch (SQLException ex) {
        Logger.getLogger(coneccionBD.class.getName()).log(Level.SEVERE, null, ex);
    }
}

我收到这个错误

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/vibur/objectpool/listener/Listener
    at HE.MVC.Modelo.Laboratoriales.Conexion.createDataSourceWithStatementsCache(Conexion.java:36)
    at HE.MVC.Modelo.Laboratoriales.Conexion.conectarBD(Conexion.java:63)
    at HE.MVC.Modelo.MedicamentosAbituales.cargaTabla(MedicamentosAbituales.java:186)
    at HE.MVC.Vistas.Paciente.NuevopacienteController.iniciaTablas(NuevopacienteController.java:351)
    at HE.MVC.Vistas.Paciente.NuevopacienteController.initialize(NuevopacienteController.java:1156)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
    at HE.HEstadistica.LanzaNuevoPaciente(HEstadistica.java:304)
    at HE.MVC.Vistas.Paciente.EscenaPacientesController$7$1.run(EscenaPacientesController.java:347)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.vibur.objectpool.listener.Listener
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 17 more

我要问的是两件事

1.- 我在这段代码中做错了什么?

2.- 是否有用于学习连接池的书、手册、视频页(HikariCP 对初学者的解释会很棒),我可以在那里学习如何进行这项工作?

@CorrOrtiz,关于您的第一个问题,@hotzst 在您的问题下方的评论中建议的内容是正确的。 对于Vibur DBCP ,您需要两个 jar 文件作为应用程序的依赖项:vibur-dbcp-9.0.jar 和 vibur-object-pool-9.0.jar。 您得到的异常意味着您很可能缺少第二个依赖项,尽管如果您已经通过 Maven 添加了 vibur-dbcp 依赖项,那么您也应该可以传递地获得第二个依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM