我正在使用WCF,SQL Server和ADO.NET.我正在研究数据访问层的两个实现选项.
选项2如下所示:
using (var connection = new SqlConnection(...)){...}
Run Code Online (Sandbox Code Playgroud)
这两者之间的性能差异是什么?什么时候汇集连接是有意义的?
当有人要求你在Java面试中为连接池编写(做/描绘)设计时,你通常会写什么.
您是否为连接池编写代码或者是否描述了类图.有人可以解释一下连接池的设计.
我一直在项目中的一个小文件管理器模块上工作,其中一个文件夹列表显示在树视图中.我已经在javascript中做了所有的事情.每次我点击一个节点时,数据列表都会被提取到一个datareader并填充在前端.但是当我在IIS中部署应用程序时,在大约18次后续点击后,IIS将暂停,我必须重新重置它.当我检查事件查看器时,我收到以下错误
异常类型:InvalidOperationException异常消息:超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
因此,在web.config中的连接字符串中,我将池设置为True,最大池大小为200,问题解决了.
但我想知道以这种方式使用连接池大小是一个好习惯.或者我们如何阻止打开这么多连接.谢谢!
我正在使用Java Servlets开发一个网站,我的研究表明,最好每个用户保持一个数据库连接(而不是每次只有一个连接在后台或者每次交易需要时连接到数据库)被制造).但是,我不知道如何做到这一点.我目前正在做的是在我的数据访问对象类中
private static Connection conn;
Run Code Online (Sandbox Code Playgroud)
我有一个HTTPSessionListener-on sessionCreated事件,我使用这个静态"conn"变量连接到数据库,并且在sessionDestroyed事件中我断开了"conn"变量:
...在我的"MySessionListener"中......
public void sessionCreated(HttpSessionEvent sessionEvent) {
System.out.println("Session created!");
DAO.connect();
}
public void sessionDestroyed(HttpSessionEvent sessionEvent)
{
System.out.println("Session destroyed");
String user = (String) sessionEvent.getSession().getAttribute("userid" );
if (user != null) DAO.signUserOut(user);
DAO.disconnect();
}
Run Code Online (Sandbox Code Playgroud)
现在问题是:
我已经完成了一些教程.
他们说通过finally块关闭数据库连接.
但我心里有一个问题:
想想两个线程正在主动读取一个连接并且一个线程完成其工作并关闭连接的场景.那么另一个会发生什么?
第二个线程能够完成他的任务吗?
如果我的问题无效,请告诉我,请告诉我最佳解决方案.
我编写了下面的代码 - 我希望DataSource是一个单例,并使用枚举习惯用于单例.Data source rejected establishment of connection, message from server: "Too many connections"经过一段时间后我得到了很多- 我的Singleton模式的实现是错误的还是原因在于其他地方?
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
class DBConnectionPool {
private DataSource ds = null;
private DBConnectionPool() {
try {
Context context = new InitialContext();
Context envctx = (Context) context.lookup("java:comp/env");
ds = (DataSource) envctx.lookup("jdbc/TestDB");
} catch (Exception e) {
e.printStackTrace();
}
}
private static enum PoolSingleton {
POOL_INSTANCE;
private static final DBConnectionPool singleton = new DBConnectionPool(); …Run Code Online (Sandbox Code Playgroud) 我正在使用Java GUI,我经常需要连接到数据库,但我只想使用连接语句一次,而不是每次使用它时写入整个事物.我想我可能会在整个系统中连接20次左右.所以我想知道在哪种情况下最好使用连接池?
我正在尝试在spring/camel中为Websphere MQ配置JMS连接池.当我试图从spring使用CachingConnectionFactory时,我看到了类强制转换异常.无法从WMQ找到一个池,有没有人与WMQ建立连接池,我没有找到任何例子.ActiveMQ有很多例子.
这是我到目前为止,即产生类强制转换异常.
<bean id="inCachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="inboundMqConnectionFactory1" />
<property name="sessionCacheSize" value="5" />
</bean>
<bean id="inboundWebsphereMq1" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="inCachingConnectionFactory" />
<property name="destinationResolver" ref="jmsDestinationResolver" />
<property name="transacted" value="true" />
<property name="transactionManager" ref="txManager1" />
</bean>
<bean id="inboundMqConnectionFactory1" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${isi.inbound.queue.host2}" />
<property name="port" value="${isi.inbound.queue.port}" />
<property name="queueManager" value="${isi.inbound.queue.queuemanager2}" />
<property name="channel" value="${isi.inbound.queue.channel2}" />
<property name="transportType" value="${isi.queue.transportType}" />
</bean>
Run Code Online (Sandbox Code Playgroud)
我看到的例外就在这里
试图恢复.原因:com.sun.proxy.$ Proxy37无法强制转换为com.ibm.mq.jms.MQQueueSession
这是我第一次尝试在tomcat(版本8)中建立连接池,我有点困惑.看来我有两个选项可用,1)我可以添加类似的东西:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Specify a JDBC datasource for oracle -->
<Resource name="jdbc/testdb"
auth="Container"
type="javax.sql.DataSource"
username="DB_USERNAME"
password="DB_PASSWORD"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@xxx:1525:dbname"
maxActive="10"
maxIdle="4" />
</Context>
Run Code Online (Sandbox Code Playgroud)
在我的项目WEB-INF文件夹中名为"context.xml"的文件中.或者,2)我可以添加这样的东西:
<Context path="/dbcp" docBase="dbcp" debug="5"
reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container"
type="javax.sql.DataSource" removeAbandoned="true"
removeAbandonedTimeout="30" maxActive="100"
maxIdle="30" maxWait="10000" username="kunal"
password="java_facier"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/dbcptest"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
在TOMCAT_HOME/conf/sever.xml中,然后添加:
<resource-ref>
<description> DB Connection Pooling</description>
<res-ref-name> jdbc/TestDB</res-ref-name>
<res-type> javax.sql.DataSource</res-type>
<res-auth> Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
到我的项目中的WEB-INF/web.xml文件...
如果我在这两种情况下都是正确的,哪一个更好用?另外我会把我的数据库供应商jdbc-driver放在哪里?
每次运行我的showData.js脚本时都会调用它
var pool = mysql.createPool({
Run Code Online (Sandbox Code Playgroud)
有没有办法在node.js服务器启动时创建连接池?
我已经尝试将createPool添加到server.js但是当我调用时,我似乎无法从我的showData.js脚本中访问该对象
pool.getConnection(function(err,connection){
Run Code Online (Sandbox Code Playgroud)
是否有必要在node.js服务器启动时启动连接池?
即使在调用connection.release并且脚本关闭后,mysql连接池是否仍然存在?
编辑 @Marco,我得到了ReferenceError:池没有定义.我知道问题是我没有将池拉入showData.js.根据node.js,可以多次加载模块.
来自https://nodejs.org/api/modules.html
高速缓存
模块在第一次加载后进行缓存.这意味着(除其他外)每次调用require('foo')将获得完全相同的返回对象,如果它将解析为同一个文件.
多次调用require('foo')可能不会导致模块代码多次执行.这是一个重要的特征.有了它,就可以返回"部分完成"的对象,从而允许加载传递依赖,即使它们会导致循环.
如果要让模块多次执行代码,则导出一个函数,然后调用该函数.
这是我最新的设置:
LIB/dbpool.js
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'someco.com',
user : 'pinco',
password : 'pallino'
});
module.exports = pool;
Run Code Online (Sandbox Code Playgroud)
server.js
const pool = require('./lib/dbpool');
Run Code Online (Sandbox Code Playgroud)
showData.js
'use strict';
module.exports = router => {
router.route('/show').post((req, res) => {
pool.query('SELECT * FROM db.users', function(err, rows, fields) {
Run Code Online (Sandbox Code Playgroud)
我是否需要server.js和showData.js中的以下行?
const pool = require('./lib/dbpool');
Run Code Online (Sandbox Code Playgroud)