[英]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.