我试图更好地理解 ADO.NET 和 SQL Server 之间交互的池化理论,但还没有找到明确的答案。我一直假设每个进程,但我突然想到它可能是每个 AppDomain。
任何深入的参考也将不胜感激。
我正在使用Executors编写连接池.我的问题是,当数据库关闭时,池中的所有连接都将成为无效连接.
一种方法是定期刷新连接池,或检查连接的有效性.处理此类问题的最佳方法是什么?
使用java/Spring/Ibatis sqlserver的数据库,并datasource在org.apache.commons.dbcp.BasicDataSource下面的数据源对象我要揭露实时连接池指望像现在有多少人在使用,有多少闲置的,我想使用监视jmx任何快速的想法如何实现
<bean id="wssModelDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sourceforge.jtds.jdbcx.JtdsDataSource"/>
<property name="url" value="com.wss.jdbc.ConnectionUrl=jdbc:jtds:sqlserver://x-x2/x_control_QA;appName=wss;sendStringParametersAsUnicode=false;loginTimeout=20;socketTimeout=180"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
<property name="maxActive" value="10"/>
<property name="maxWait" value="10000"/>
</bean>
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用连接池 (snaq.db.ConnectionPool)。连接池初始化如下:
String dburl = propertyUtil.getProperty("dburl");
String dbuserName = propertyUtil.getProperty("dbuserName");
String dbpassword = propertyUtil.getProperty("dbpassword");
String dbclass = propertyUtil.getProperty("dbclass");
String dbpoolName = propertyUtil.getProperty("dbpoolName");
int dbminPool = Integer.parseInt(propertyUtil.getProperty("dbminPool"));
int dbmaxPool = Integer.parseInt(propertyUtil.getProperty("dbmaxPool"));
int dbmaxSize = Integer.parseInt(propertyUtil.getProperty("dbmaxSize"));
long dbidletimeout = Long.parseLong(propertyUtil.getProperty("dbidletimeout"));
Class.forName(dbclass).newInstance();
ConnectionPool moPool = new ConnectionPool(dbpoolName, dbminPool, dbmaxPool, dbmaxSize,
dbidletimeout, dburl, dbuserName, dbpassword);
Run Code Online (Sandbox Code Playgroud)
使用的数据库池值是:
dbminPool=5
dbmaxPool=30
dbmaxSize=30
dbclass=org.postgresql.Driver
dbidletimeout=25
Run Code Online (Sandbox Code Playgroud)
我的应用程序在某处泄漏连接(连接未释放),因此连接池已耗尽。我现在已经修复了那个代码。
不应该在空闲超时时间后关闭连接吗?如果这不是正确的假设,是否有任何方法可以关闭打开的空闲连接(仅通过 java 代码)?
当我在ubuntu 12/JDK7上运行tomcat7.0_26(在VM /虚拟机上运行)时,我在日志目录的catalina.out文件中不断收到有关DataSourceFactory的错误信息.有什么想法可以解决这个问题吗?我也复制了下面的相关server.xml和context.xml部分.我可以使用提供的用户名/密码组合连接到postgres数据库.
server.xml:
<Resource type="javax.sql.DataSource"
name="jdbc/DB"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://localhost:5432/DBName"
username="database-user"
password="database-user-pwd"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="100"
minIdle="10"
maxWait="10000"
initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000"
jmxEnabled="true"
Run Code Online (Sandbox Code Playgroud)
的context.xml
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
<ResourceLink …Run Code Online (Sandbox Code Playgroud) 请帮助....当我从Mysql表中选择数据时,它显示"已经有一个与此Connection相关的开放DataReader必须先关闭.vb.net" 
Private Sub cmbJobCategoryVisa_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbJobCategoryVisa.SelectedIndexChanged
''"
Dim MyCommand As New MySqlCommand("SELECT jobcategorycode FROM jobcategory WHERE jobcategory='" & Me.cmbJobCategoryVisa.SelectedItem & "'", MyConnection)
Dim MyReader As MySqlDataReader = MyCommand.ExecuteReader
While MyReader.Read
If MyReader.HasRows = True Then
Me.txtJobCategoryCodeVisa.Text = MyReader("jobcategorycode")
End If
End While
MyReader.Close()
MyCommand.Dispose()
End Sub
Run Code Online (Sandbox Code Playgroud)
'''在下面的代码执行时,',显示成像错误
Private Sub txtEmpNo_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtEmpNo.Validating
Dim MyCommand5 As New MySqlCommand("SELECT * FROM employeesmaster WHERE empno='" & Me.txtEmpNo.Text & "'", …Run Code Online (Sandbox Code Playgroud) 我在 Eclipse 4.3.2 中使用 Tomcat 7 (jdk 1.6)。
我配置了我的连接池如下:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
driverClassName="com.p6spy.engine.spy.P6SpyDriver"
url="jdbc:p6spy:oracle:thin:@server:1521:XXX"
username="XXX" password="XXX" maxActive="2" maxIdle="2" maxWait="-1"
validationInterval="30000" validationQuery="SELECT 1 FROM DUAL"
/>
Run Code Online (Sandbox Code Playgroud)
我使用的是 Spring 3.2.14、Hibernate 3.2.6-GA、CXF 2.7。
每次收到 SOAP 请求时,我都会在 P6SPY 日志中看到验证查询独立于 validationInterval及其描述https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html 运行。
我希望连接最多每 30 秒验证一次。
我的配置有什么问题吗,或者这是一个已知的错误?
我正在尝试优化访问 SQL Server 2014 数据库的代码性能,并注意到连接池似乎不像 ADO.NET 所宣传的那样工作。默认情况下,它应该被启用并开箱即用(只要使用相同的连接字符串)。然而,我的实验表明,在 SqlConnection 上打开/关闭连接实际上会导致审核登录/注销被引发。
根据https://msdn.microsoft.com/en-us/library/vstudio/8xx3tyca(v=vs.100).aspx这不应该是这种情况:
从连接池获取连接或将连接返回到连接池时,不会在服务器上引发登录和注销事件。这是因为连接返回到连接池时实际上并没有关闭连接。
我的简单测试是创建一个控制台应用程序,类似于以下内容:
var conn = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=icedb;");
for (int i = 0; i < 3; i++)
{
conn.Open();
var cmd = conn.CreateCommand();
cmd.CommandText = "select 1";
cmd.ExecuteScalar();
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
运行此代码会产生类似于以下内容的 Sql Profiler 捕获的结果。观察多个登录/注销事件,如果池按宣传的那样工作,则不应捕获这些事件。我已经能够在多台机器(Windows 8/10、.NET 4.5、Sql Server 2014 Developer Edition)上重现这个。
主要问题:如何让连接池工作。
我正在使用c3p0进行连接池.我已将min连接配置为100,最大大小为2000.我只是编写一个简单的插入程序来检查工作台中有多少连接处于活动状态.但是,我收到以下错误
java.sql.SQLException: Data source rejected establishment of connection, message from server: "Too many connections"
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:650)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1808)
at com.mysql.jdbc.Connection.<init>(Connection.java:452)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
Run Code Online (Sandbox Code Playgroud)
我的Hibernate.cfg.xml如下
<!-- c3p0 Connection pool config -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">100</property>
<property name="hibernate.c3p0.max_size">2000</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.validate">true</property>
Run Code Online (Sandbox Code Playgroud)
我的Java程序是
public static void main(String[] args) {
// TODO Auto-generated method stub
Transaction tx = null;
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
tx = session.beginTransaction(); …Run Code Online (Sandbox Code Playgroud) 由于没有关于如何使用 Sailsjs 创建连接池的文档,我一直在搜索它,我发现Sails -mysql 适配器确实有任何池配置,但与测试有关:
{
host: process.env.WATERLINE_ADAPTER_TESTS_HOST || 'localhost',
// (...)
database: process.env.WATERLINE_ADAPTER_TESTS_DATABASE || 'sails_mysql',
pool: true,
connectionLimit: 10,
waitForConnections: true
}
Run Code Online (Sandbox Code Playgroud)
所以我尝试在 Sails 中包含pool: true到我的connections.js文件中:
someMysqlServer: {
adapter: 'sails-mysql',
host: '127.0.0.1',
user: 'root',
password: '',
pool: true,
database: 'mydatabase'
},
Run Code Online (Sandbox Code Playgroud)
服务器仍在运行,我从数据库中恢复数据,但我完全不确定我是否设置了连接并抛出了一个池服务。有什么办法可以检查这个功能吗?
谢谢。
java ×4
.net ×2
mysql ×2
sql-server ×2
ado.net ×1
c# ×1
c3p0 ×1
hibernate ×1
jdbc ×1
postgresql ×1
sails.js ×1
spring-jdbc ×1
spring-jmx ×1
tomcat ×1
tomcat7 ×1
vb.net ×1