我想使用JDBC连接池.最重要的因素是它易于使用且无错误.什么适合我?
背景:我正在将我的应用程序从npgsql v1移动到npgsql v2.0.9.运行我的应用程序几分钟后,我得到一个System.Exception:从池中获取连接时超时.
网络声称这是由于连接泄漏(打开数据库连接,但没有正确关闭它们).
所以
我正在尝试诊断npgsql中泄漏的postgres连接.
来自各种网络文学; 诊断泄漏连接的一种方法是在npgsql上设置日志记录,并在日志中查找泄漏的连接警告消息.问题是,我没有在任何地方的日志中看到此消息.
我还发现了监视npgsql连接的实用程序,但它不稳定并崩溃.
所以我手动检查代码.对于创建npgsql连接的每个场所,都有一个finally块处理它.对于打开datareader的每个场所,都使用CommandBehavior.CloseConnection(并且处理了datareader).
还有其他地方可以检查或者有人可以推荐一种寻找漏水池连接的方法吗?
我正在使用API连接到一些硬件终端和网络.API允许我连接到服务器,断开连接并查询数据,这与JDBC连接允许的操作非常相似.无论如何,由于这不使用JDBC Connection接口,我不能使用已存在的连接池.我想避免自己写一个,如果我可以使用已经存在的,或者可能只是在其上构建一个小适配器.任何人都知道任何允许我启用连接池的框架/库,可以处理我的连接,可以确保连接始终处于活动状态等?
我看过Commons Pool,但是这只给你几个类来放置/获取你的连接...它不做任何维护任务等(检查连接是否有时无效,重新连接等).我可以添加连接检查和重新连接的机制,如果有任何问题等,以防没有任何东西已经这样做.
干杯,斯蒂夫.
我正在使用tomcat与oracle数据库的连接池.它运行正常,但是当我长时间使用我的应用程序后,它会给出" 连接重置 " 错误.我收到此错误是因为在tomcat数据源关闭逻辑连接之前oracle服务器上的物理连接已关闭.因此,在从数据源获取连接之前,我正在使用连接对象的isValid(0)方法检查连接有效性,如果物理连接已关闭,则该方法为false.但我不知道如何从池中删除该无效的连接对象.
我讨厌甚至提起这个b/c有这么多的几百页报道这个错误可追溯到7 - 8年......但是,我无法想象这一点.
我在服务器A上运行的报表服务连接到服务器B上的SQL Server 2008 R2.两台服务器都运行Windows Server 2008.报表服务是多线程的,每次在自己的线程上运行多达10个报表.
我的连接字符串如下:
Data Source=ServerB;Initial Catalog=DBName;trusted_connection=YES;Connection Timeout=0;Max Pool Size=500;
Run Code Online (Sandbox Code Playgroud)
如您所见,我已将连接超时设置为0以等待连接,直到其可用,并且最大池大小为500 b/c我想确保池对于我的多线程服务来说不是太小.该错误通常仅在服务启动时显示,并且存在等待处理的报告队列.
显然,要做的第一件事就是寻找泄漏的连接..必须有未关闭的连接导致池填满,对吧?没有 - 看起来像池永远不会填满.
我花了最后几个小时在服务器上运行性能监视器,观看".NET数据提供程序为SqlServer",而NumberOfPooledConnections从未超过20左右.我还在SQL服务器上运行perfmon,观看"SQLServer:General Statistics",UserConnections永远不会超过50.在此期间,我通过手动重新启动服务导致此错误报告2或3次.
我还能找到什么?还有什么会导致这个错误?完整的错误消息是:
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.SqlClient.SqlConnection.Open()
Run Code Online (Sandbox Code Playgroud)
谢谢,斯蒂芬
我正在使用Day CQ.我想使用Felix控制台中提供的连接池将一些数据存储在SQL Server数据库中.我可以通过使用在defineObjects标记中定义的SlingScriptHelper类型的"sling"对象从JSP执行此操作
sling.getService(DataSourcePool.class).
Run Code Online (Sandbox Code Playgroud)
但是,我想使用在OSGi包中创建的servlet来处理来自客户端的请求.servlet没有defineObjects标记,因此未定义"sling"对象.我没有看到在servlet中创建有效的SlingScriptHelper对象的方法,但似乎必须可行.
有办法吗?
我正在以适当的方式处理连接.
1.我在我的应用程序中使用"Hibernate"连接池.每当我从池中获得连接时,我都会在完成交易后返回池中.
2.我已经监测数据库,检查连接.我将'空闲连接'时间设置为60秒.我发现没有连接对象运行超过60秒.
我仍然经常收到这个错误.我的Web应用程序正在停止.我必须每天重启tomcat一次.但是,我正在寻找一个永久的解决方案,而无需重新启动tomcat.
任何人都可以解释根本原因吗?所以我可以解决这个问题.
错误日志:
INFO: Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.c3p0.ComboPooledDataSourceBeanInfo. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1587)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
...
...
...
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Run Code Online (Sandbox Code Playgroud)
我的hibernate-contect.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" …Run Code Online (Sandbox Code Playgroud) 我想清除基本的3点,
是否在旧会话上开始新的数据库事务会获得新连接并恢复会话?
提交数据库事务是否会断开会话与JDBC连接并将连接返回到池?
从Hibernate Documentation,早期版本的Hibernate需要显式断开连接并重新连接Session.不推荐使用这些方法,因为开始和结束事务具有相同的效果.它们如何产生同样的效果?
session hibernate database-connection jpa connection-pooling
我使用Spring来实现以下目标:
在服务器上,我通过REST接口以XML格式接收数据.我想将数据转换为JSON并将其发布到另一个服务器.我的代码(我删除了一些敏感的类名/ URL以避免雇主的愤怒)看起来像这样:
主要/配置类:
package stateservice;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class App {
Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
System.out.println("Start!");
SpringApplication.run(StateServiceApplication.class, args);
System.out.println("End!");
}
@Bean
public RestTemplate restTemplate() {
log.trace("restTemplate()");
HttpHost proxy = new HttpHost("proxy_url", 8080);
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
// Increase max total connection to 200
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(50);
RequestConfig requestConfig = RequestConfig.custom().setProxy(proxy).build();
HttpClientBuilder httpClientBuilder …Run Code Online (Sandbox Code Playgroud) java spring connection-pooling apache-httpclient-4.x spring-boot
对stackoverflow社区的人们.我正在寻找一些与HikariCP连接池面临的问题的帮助.
高级:我正在尝试使用线程池创建多个线程,我的计划是为每个工作线程提供与HikariCP的独立连接,但HikariCP正在做的是它在多个线程之间共享一个公共连接.我在用
public synchronized Connection getConnection() throws SQLException
{
synchronized (dataSource) {
return dataSource.getConnection();
}
}
Run Code Online (Sandbox Code Playgroud)
检索数据库连接.现在,当我关闭连接时,我发现其他线程中的问题表明连接已关闭,并且线程正在处理的批记录被删除.
以下是我的日志文件中的stmts:
2016-06-08 11:52:11,000 DEBUG [com.boxer.delete.SmartProcessWorker] (pool-1-thread-6:) Closing DB connection ConnectionJavassistProxy(1551909727) wrapping oracle.jdbc.driver.T4CConnection@7b4f840f
2016-06-08 11:52:11,002 DEBUG [com.boxer.delete.SmartProcessWorker] (pool-1-thread-9:) Closing DB connection ConnectionJavassistProxy(1511839669) wrapping oracle.jdbc.driver.T4CConnection@343b8714
2016-06-08 11:52:11,014 ERROR [com.boxer.delete.SmartProcessWorker] (pool-1-thread-5:) SQLException trying to Execute pstmt batch
2016-06-08 11:52:11,014 ERROR [com.boxer.delete.SmartProcessWorker] (pool-1-thread-5:) Connection is closed
java.sql.SQLException: Connection is closed
at com.zaxxer.hikari.proxy.ConnectionProxy.checkClosed(ConnectionProxy.java:275)
at com.zaxxer.hikari.proxy.ConnectionJavassistProxy.commit(ConnectionJavassistProxy.java)
at com.boxer.delete.SmartProcessWorker.processRecords(SmartProcessWorker.java:219)
at com.boxer.delete.SmartProcessWorker.run(SmartProcessWorker.java:174)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
现在,有人可以帮助我如何从hikari数据源获得Db连接,这显然不被任何其他线程共享?
concurrency multithreading database-connection connection-pooling hikaricp