La connexion à la base de la piscine[Hikari] initialiser erreur
Je suis en train de configurer HikariCP pour mon application web. Je ne suis pas en utilisant des cadres, c'est une simple simple java web app. Quand j'ai essayé d'établir une connexion via JDBC, il a été un succès et j'ai été en mesure d'effectuer toutes les opérations de base de données.
Cependant, lorsque j'essaie d'obtenir une connexion avec un pool de connexions, j'obtiens une exception après l'initialisation, qui je n'ai aucune idée sur.
Ci-dessous est la config que j'utilise, je suis initialisation dans un contexte d'écoute. Je suis en cours d'exécution sur Java 1.7, avec un conteneur Tomcat à l'aide HikariCP Java 6 dépendance 2.3.2
import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.mkgcorp.travelweb.util.TLog;
import com.sun.jersey.core.util.Base64;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class CPInit implements ServletContextListener{
private final static String TAG = CPInit.class.getSimpleName();
private static HikariConfig mConfig;
private static HikariDataSource mDataSource;
public static String POOL_NAME = "TripPool";
public static int POOL_SIZE = 10;
public static int TIME_OUT = 30*1000;
public static int MIN_IDLE_SIZE = 2;
public static boolean isDebuggable;
private String PASSWORD = "YWRtaW4=";
public CPInit(){
String string = new String(Base64.decode(PASSWORD));
TLog.info(TAG, "Password = " + string);
mConfig = new HikariConfig();
mConfig.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
mConfig.addDataSourceProperty("url", "jdbc:mysql://127.0.0.1:3306/travlemate");
mConfig.addDataSourceProperty("cachePrepStmts", "true");
mConfig.addDataSourceProperty("prepStmtCacheSize", "250");
mConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
mConfig.addDataSourceProperty("useServerPrepStmts", "true");
mConfig.addDataSourceProperty("user", "root");
mConfig.addDataSourceProperty("password", string);
mConfig.setMaximumPoolSize(POOL_SIZE);
mConfig.setMinimumIdle(MIN_IDLE_SIZE);
mConfig.setPoolName(POOL_NAME);
mConfig.setConnectionTimeout(TIME_OUT);
mConfig.setAutoCommit(true);
mConfig.setInitializationFailFast(false);
mDataSource = new HikariDataSource(mConfig);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
TLog.info(TAG, "CP has being destroyed");
mDataSource.close();
}
public static Connection getConnection() throws SQLException{
TLog.info(TAG, "get data connection");
return mDataSource.getConnection();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
TLog.info(TAG, "CP has been initilizing");
String parm = arg0.getServletContext().getInitParameter("debugging");
isDebuggable = Boolean.valueOf(parm);
}
}
C'est l'exception qui je suis:
java.sql.SQLTimeoutException: Timeout after 30005ms of waiting for a connection.
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:228)
at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:183)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:91)
at com.mkgcorp.travelweb.controller.CPInit.getConnection(CPInit.java:68)
at com.mkgcorp.travelweb.data.Database.getConnection(Database.java:47)
at com.mkgcorp.travelweb.data.DataManager.getConnection(DataManager.java:100)
at com.mkgcorp.travelweb.data.DataManager.authenticateUser(DataManager.java:135)
at com.mkgcorp.travelweb.webservices.TripResource.isUserValid(TripResource.java:169)
at com.mkgcorp.travelweb.webservices.SyncResource.getContactStatus(SyncResource.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured
at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:399)
at com.zaxxer.hikari.pool.HikariPool$1AddConnection.run(HikariPool.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
... 1 more
OriginalL'auteur Techfist | 2015-02-08
Vous devez vous connecter pour publier un commentaire.
En fait j'ai eu la réponse, Hikari besoins pour définir un test de connexion de requête, si c'est fait JDBC4 isValid sera pas appelé.
donc simplement par l'ajout de la propriété, j'ai été capable de le faire fonctionner.
Notez également que MySQL Connector/J à partir de 5.1.6+ prend en charge isValid(), donc si vous mettez à jour votre pilote, vous devriez être en mesure de retirer la requête de validation.
Merci pour la réponse @brettw, je Vais utiliser la commande ping requête, certainement je vais regarder dans l'obtention de mon pilote mis à jour pour se débarrasser de la requête de test en tout.
suis confronté à un étrange problème maintenant, je suis de mieux en ava.sql.SQLTimeoutException: Délai d'attente après 30003ms d'attente de connexion. au com.zaxxer.hikari.piscine.BaseHikariPool.getConnection(BaseHikariPool.java:228)
suis de l'exécution d'une db opération en boucle, au départ d'appel getConnection, et une fois que mon opération est terminée, je appelez simplement conn.close(), son travail pour la première quelques boucles mais entre son défaut de fournir de connexion et mon programme plante. une idée ?
OriginalL'auteur
J'ai été frapper le même problème, et j'ai juste pensé à elle.
Je suis sur un Mac, et j'avais en quelque sorte
postgresql-9.0-802.jdbc3.jar
installé dans mon/Library/Java/Extensions
répertoire.DriverManager
serait de prendre cette place comme la meilleure façon de se connecter à unjdbc:posgresql://
URL. C'est un JDBC3 pilote, donc il n'y a pas deisValid
méthode.Même quand je mets un JDBC4 Pilote sur mon chemin de classe, qu'il s'agisse
org.prosgreql.Driver
oucom.impossibl.postgres.jdbc.PGDriver
, le JDBC3 pilote devrait le remplacer.Alors j'ai supprimé
/Library/Java/Extensions/postgresql*
et tout est bien.OriginalL'auteur Brandon Wirick