Tag: 连接池

如何记录Tomcat 7 JDBC连接池,创建连接

尽管我们正在使用Tomcat 7 JDBC连接池,但我正在尝试调试看起来过多的数据库连接被打开和关闭。 如何在数据源上调用getConnection()时导致打开新连接而不是从池中借用现有连接?

HikariPool-1 – 连接不可用,请求超时后

我正在使用HikariCP 2.4.7连接池。 在启动应用程序之后一切都很好但是在一段时间之后没有调用getConnection()我在尝试getConnection()时遇到了这个错误: java.sql.SQLTransientConnectionException: HikariPool-1 – Connection is not available, request timed out after 42734ms. at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:555) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:188) at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:147) at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:99) at pl.airly.database.ComplexOperations.getSensorDataFromArea(ComplexOperations.java:310) at pl.airly.database.ComplexOperations.getMeasurementsInAreaWithinTimeFrame(ComplexOperations.java:201) at pl.airly.ResponseGenerator.getResponseAdequateToRequest(ResponseGenerator.java:139) at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at […]

将连接池与Jedis一起使用

我在rest服务中使用Jedis连接redis服务器。 当我调用Web服务时,我想做jedis.hmget , jedis.exits和hgetALL之类的操作 。 jedis.hmget(“employee:data:” + emp_user_id, “employee_id”).get(0); 我用于redis的配置是: Jedis jedis; JedisShardInfo shardInfo; @PostConstruct public void init() { try { shardInfo = new JedisShardInfo(Config.getRedisHost(), Config.getRedisPort()); shardInfo.setPassword(Config.getRedisPassword()); jedis = new Jedis(shardInfo); jedis.select(2); //jedis.se } catch (Exception e) { logger.error(“Exception in init ——- > ” + e); } } 我知道jedis不是线程安全的。当我一次使用1000个线程来调用服务时,我得到exception作为意外的流结束。 我开始知道jedis pool是线程安全但无法找到它的具体解决方案。 谢谢。 任何帮助,将不胜感激。

在java Web应用程序中存储数据库字符串连接的位置?

我即将用java开始我的第一个项目 让我告诉我以前如何处理这些事情…… 到目前为止,我一直在使用VB6编写的com + componente来处理asp。 该组件通过com +管理控制台与域用户注册,其中包括lile my_company_domain \ my_app_account 组件从udl文件读取配置,配置为访问具有集成安全性的DB。 我使用server.createobject从asp调用组件,组件使用指定的域帐户运行,因此每个数据库访问都使用此帐户运行… 我喜欢这种方法的有以下几点: 使用集成安全性 – 没有sql用户 无需重新编译任何内容来更改db(编辑udl文件)或域帐户(编辑com +组件配置) 池连接(因为我总是使用相同的连接字符串) 生产人员可以在不将帐户密码留在文本文件上的情况下更改配置 … 那么,在java上实现这样的东西最好的方法是什么? 我已经看到了一些关于Commons-DBCP的东西,是否可以使用集成安全性? 非常感谢… – 添加回应评论 通过集成安全性我的意思是我只需要配置域帐户,就是这样,我不使用sql server帐户,只使用运行VB6 com +组件的帐户。 好吧,也许这不是合适的术语,但我希望你能得到这个想法……

我应该关闭来自数据源的连接吗?

当我执行dataSource.getConnection()时,当我希望连接返回池(而不是关闭)时,调用close方法是否返回到池的连接或实际关闭它?

Basicdatasource连接超时问题(使用mysql)

我在我的应用程序中使用BasicDatasource。 此应用程序正在处理大量原始数据。 有时1次查询可能需要15分钟以上。 (使用mysql作为db) 这是我的问题,我从池中获取连接,然后对其执行多个查询。 但是当我使用相同的连接超过15分钟时,我得到以下错误。 在mysql服务器中,max_wait设置为180小时,因此保持连接活动并且没有防火墙规则设置为终止超过一定时间的活动连接不应该是一个问题。 你觉得我在这里想念的是什么? The last packet successfully received from the server was 928,374 milliseconds ago. The last packet sent successfully to the server was 928,374 milliseconds ago. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3055) at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2941) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) […]

用于MS SQL Server的JBoss AS 5数据库连接池重新连接例程

当从JBoss AS 5到DB的连接暂时丢失时,我想提出重新连接到MS SQL Server的最佳方法。 对于Oracle,我发现了这个问题: “当连接变坏时,有没有办法让JBoss连接池重新连接到Oracle?” 它表示它使用Oracle特定的ping例程,并利用JBoss’Configuration Datasources Wiki中描述的valid-connection-checker-class-name属性。 我想避免的是每次从池中提取连接时都运行另一个SQL,这是另一个属性check-valid-connection-sql基本上做的。 所以现在,我倾向于使用exception排序器类名称的方法,但我不确定这是否是MS SQL Server的最佳方法。 希望听到您对该主题的建议。 谢谢!

Java中的SQLite连接池 – 锁定数据库

我已经在multithreading环境中阅读了几个关于SQLite的相关主题,但我找不到一个明确的声明,所以请原谅我,我再次提出这个主题。 我需要从多个线程访问应用程序的数据库以执行更新语句。 数据库本身可以是SQLite或MySQL,具体取决于用户的选择。 对于MySQL处理程序,我使用tomcat-jdbc库实现了一个连接池。 现在我正在寻找SQLite处理程序的最佳方法,因为正常的连接池不应该工作,因为SQLite一次只支持一个写入连接来锁定整个数据库。 我应该继续使用相同的连接一个接一个地进行所有线程(通过同步连接?),还是应该使用已经存在的仅存在连接的tomcat库创建连接池? 一个连接的连接池可能超大吗?

SQL更新语句的Java单工作线程

我正在研究一个基于Java的服务器,我将在其中拥有多个线程(每个连接用户一个线程+一些额外的线程)。 将涉及一些数据库连接,所以我想每次服务器对数据库进行SELECT查询时,它将为此启动一个新线程,以防止阻塞当前线程。 我打算为此使用连接池,我想我知道如何做到这一点。 (我已经研究过C3P0 )但是,也会涉及很多UPDATE语句,但是这些语句直接运行并不重要,这里有延迟。 因为可能有很多UPDATE语句,所以我想为所有UPDATE语句设置一个工作线程。 在我看来,这将具有能够重用PreparedStatement -objects的优势 问题:我如何从其他线程告诉UPDATE -worker线程运行一些语句? 我知道multithreading以及如何使用synchronized块让线程彼此“交谈”,但是随着涉及的数据库,它突然感觉更复杂。 我已经读过不应该在线程之间共享准备好的语句和连接。 我现在就如何解决它的想法:(感觉不是一个好的解决方案) 使用自定义类的LinkedBlockingQueue (或其他类型的Queue),其中包含要调用哪种UPDATE语句以及要将其发送到哪些参数的信息。 然后工作线程将在通知时从该队列中读取(当将某些内容添加到队列时),并且它将运行适当的方法,该方法将使用相应的预准备语句,设置参数并调用它。 编辑:一个不好的想法,我认为自己采用这种方法是params可能是int,String,double或者其他什么。 如何将它们存储在自定义类中? 将它们全部存储为String感觉不太好。 我是在正确的轨道上还是有更好的方法来解决这个问题?

DBCP连接池connection.close()是否返回到池的连接

如果我们执行getConnection(),则使用DBCP中的BasicDataSource,在finally块中我们关闭连接,它确实会返回到池的连接或者关闭连接。 我正在检查的代码片段就是这个 try { Connection conn1 = getJdbcTemplate().getDataSource() .getConnection(); //Some code to call stored proc } catch (SQLException sqlEx) { throw sqlEx; } finally { try { if (conn != null) { conn.close(); } } catch (SQLException ex1) { throw ex1; } } 我正在检查BasicDataSource的源代码,我到达了这个连接的包装类。 private class PoolGuardConnectionWrapper extends DelegatingConnection { private Connection delegate; PoolGuardConnectionWrapper(Connection delegate) […]