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

标签 java mysql javafx connection-pooling

我正在尝试为 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 依赖项,那么您也应该传递地获得第二个依赖项。

关于java - Java + MySQL + Vibur-dbcp 无法创建连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042064/

相关文章:

java - 如何找出 BufferedReader#readLine() 用于拆分行的行分隔符?

php - MySQL ERROR 1064 无法弄清楚

java - 可以使用 JavaFX 在 GridPane 中拖动形状

Java 打印 : which DocFlavor to choose for my printer?

java - 尝试使用我自己的比较器进行 binarySearch 时出错

java - 如何在每次调用写入Excel文件的方法时添加一行?

mysql - MySQL 中的用户 ID 与用户名性能

mysql - 在数据库中用备注表示选择的理想方式

java - FXtras 议程 : set allowDragging property for individual appointments instead of whole agenda

java - 如何固定边框节点?