无法在Java+;中创建连接池;MySQL+;威布尔dbcp
我正试图用vibur dbcp为JavaFX中的桌面应用程序创建一个连接池,我在AWS中获得了一个MySQL数据库,当我从Workbench连接时效果很好。但是当我从应用程序连接时,响应时间增加,我检查代码,原因是应用程序创建了很多连接,造成了很大的过热(首先,应用程序有一个嵌入式SQLite数据库,连接没有问题)我重新构建了我的代码结构,但我仍然需要做很多连接 寻找一个解决方案我发现连接池是一种方式,我找到了大量的解决方案Apache commons、C3P0、HikariCP和Vibur DBCP我尝试使用所有的解决方案,但目前我无法使用,我寻找一个教程,但我只能找到旧的实现(Java 6或更早)对于servlets,只有片段和所有对我来说都是非常混乱的(我是DB中的乞丐),我最喜欢的选择是HikariCP,但我可以让池工作,我的下一个选择是Vibur,现在我有了这个连接代码无法在Java+;中创建连接池;MySQL+;威布尔dbcp,java,mysql,javafx,connection-pooling,Java,Mysql,Javafx,Connection Pooling,我正试图用vibur dbcp为JavaFX中的桌面应用程序创建一个连接池,我在AWS中获得了一个MySQL数据库,当我从Workbench连接时效果很好。但是当我从应用程序连接时,响应时间增加,我检查代码,原因是应用程序创建了很多连接,造成了很大的过热(首先,应用程序有一个嵌入式SQLite数据库,连接没有问题)我重新构建了我的代码结构,但我仍然需要做很多连接 寻找一个解决方案我发现连接池是一种方式,我找到了大量的解决方案Apache commons、C3P0、HikariCP和Vibur D
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.-是否有一本书、手册、第o页视频用于学习会话池(HikariCP对乞丐的解释会很好)我可以在哪里学习如何实现这一点?@CorrOrtiz,关于你的第一个问题,@hotzst在他下面的评论中建议你的问题是正确的。因为你需要两个jar文件作为你的应用程序的依赖项:vibur-dbcp-9.0.jar和vibur-object-pool-9.0.jar。你得到的例外意味着你的我很想念第二个依赖项,尽管如果您通过Maven添加了vibur dbcp依赖项,那么您也应该可以通过传递方式获得第二个依赖项。
org.vibur.objectpool.listener.listener的ClassNotFoundException
表明在类路径上找不到它。我猜它是从ViburDBCPDataSource
。请查看ZeroTurnound。