- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试为我的 Web 应用程序配置 HikariCP。我没有使用任何框架,它是一个简单的 Java Web 应用程序。当我尝试通过普通 JDBC 建立连接时,它成功了,我能够执行所有数据库操作。
但是,当我尝试与连接池建立连接时,我在初始化后遇到了一个我不知道的异常。
下面是我正在使用的配置,我在上下文监听器中初始化它。我在 Java 1.7 上运行,带有一个使用 HikariCP Java 6 依赖项 2.3.2 的 Tomcat 容器
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);
}
}
这是我遇到的异常:
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
最佳答案
实际上我得到了答案,Hikari 需要设置一个连接测试查询,如果那样做 JDBC4 isValid 将不会被调用。
所以只要添加属性,我就能让它工作。
mConfig.setConnectionTestQuery("show tables");
关于java - 数据库连接池[Hikari] 初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28391936/
我有一个 Spring Boot 2 应用程序,它有两个数据源。两个数据源都可以工作,但是我无法更改诸如最大池大小之类的属性,我的更改没有生效。 我在 application.properties 文
在我公司的项目中,我们使用 Hikari 进行连接池管理。[Hibernate 4.3.5 + Spring 4 + Java 1.8]下面是配置 hibernate.connection.provi
我使用带有 Hikari 连接池、jpa 和 postgres 的 spring boot 2。 是否有任何理由继续使用这些选项 spring.datasource.testOnBorrow=true
我很高兴你们能给我在 HikariCP 文档中找不到的答案。鉴于我设置了以下池参数: minimumIdle 1 idleTimeout 10 minutes maxLifeTime 20 minut
我使用 HikariCP 和 jdbc 模板从一个数据库进行查询。我使用的方法如下: 我的 Hikari CP 配置文件(hikari.properties): driverClassName=org
我想了解更多关于使用 Hikari 处理连接池的信息。 我面临的问题是连接将达到最大值,即 250,然后回到 10。有两件事我想知道/调整 为什么连接数达到最大值然后又回到 10?如何检查后台发生了什
我想了解 Slick-Hikari 的工作原理,我已经阅读了很多文档,但我有一个我不理解其行为的用例。 我在默认配置下将 Slick 3 与 Hikari 一起使用。我已经有一个同时连接约 1000
我正在尝试为我的 Web 应用程序配置 HikariCP。我没有使用任何框架,它是一个简单的 Java Web 应用程序。当我尝试通过普通 JDBC 建立连接时,它成功了,我能够执行所有数据库操作。
光 CP 版本:2.7.4 这实际上不是问题,而是一些疑问。 a) maxLifetime :30 分钟后退出连接。它会在杀死它时自动创建一个新连接还是等待新请求然后创建一个新连接?考虑到 pool
我想将 Hikari 池配置为在应用程序启动时而不是在发出第一次查询时急切地初始化。 截至目前,spring initializr 项目显示在第一次查询时提供了 hikari 池。 重现问题 - 使用
我在哪里可以找到有关可以在运行时修改的 Hikari 属性的信息?我尝试修改connectionTimeout。我可以做到,它将在 HikariDataSource 中无一异常(exception)地
光:2.4.7 PostgreSQL JDBC 驱动程序:9.4-1201-jdbc41 我试图了解必须对 java.sql.Connection 对象执行哪些操作才能使其在 连接池? 我刚刚向一个多
我在哪里可以找到有关可以在运行时修改的 Hikari 属性的信息?我尝试修改connectionTimeout。我可以做到,它将在 HikariDataSource 中无一异常(exception)地
我在使用 HikariCP 和 Google App Engine for JEE 时遇到问题。 尝试访问网站时,我记录了错误: com.zaxxer.hikari.pool.HikariPool$P
我正在使用 Hikari 连接池管理器来查询 AS400 计算机中的一些表。 我设置了最少 1 个连接池连接,最多 10 个。我同时查询 5 个表。 问题是,尽管在查询之前使用 HikariDataS
我使用 Controller 、服务、存储库和 bean 配置类创建 Web 项目,为了创建 DataSource 我使用 Hikari,但是当我运行项目时出现异常 Caused by: java.s
public DataSource createHikariDatasource(String url, String username, String password, String driver
我们有一个位置服务应用程序,它从 MySQL 数据库向我们的其他应用程序提供位置相关信息。由于某种原因,定位服务在接收多个请求时,无法连接MySQL数据库。我们观察到,当同时获取连续15-20个请求时
我们的项目中有 Spring-boot/Hibernate/MYSQL 应用程序,并使用 Hikari 作为连接池。几分钟后,当我们的服务启动时,我们发现了以下问题: org.springframew
如何在 ignite 上管理资源。 考虑到我正在开发的应用程序,我有一些我曾经保留的连接(JDBC/SAP/其他)。我曾经将所有连接保存在一个池中并使用 HIKARI 管理它们。鉴于现在我可以拥有一个
我是一名优秀的程序员,十分优秀!