gpt4 book ai didi

java - DBCP 池使用相同的连接?

转载 作者:行者123 更新时间:2023-11-28 22:32:46 26 4
gpt4 key购买 nike

我正在使用 JMetric 来测试我的 DBCP 池。当我尝试从一个连接创建语句时,使用一个包含 20 个线程的测试我收到 nullPointerException。

我的上下文有这个配置:

<Context path="/MyApp" docBase="mypath..." crossContext="true" debug="1" reloadable="true" privileged="true" >
<Resource name="jdbc/orcl"
auth="Container"
type="oracle.jdbc.pool.OracleDataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory"
url="jdbc:oracle:thin:@192.168.1.11:1521:orcl"
user="....."
password="....."
implicitCachingEnabled="true"
connectionCachingEnabled="true"
connectionCacheProperties="{InitialLimit=20, MinLimit=50, MaxLimit=350, MaxStatementsLimit=0, ConnectionWaitTimeout=10}"
connectionCacheName="cacheOrcl"
validationQuery="select 1 from dual"
removeAbandoned="true"
maxIdle="350"
removeAbandonedTimeout="45"
logAbandoned="true"
/>

</Context>

我有一个过滤器可以连接并执行一些选择。为了重用逻辑来获取连接,我创建了一个静态方法:

public static synchronized Connection getConnection() throws ConnectionException {

Connection con = null;
try {
Object o = new InitialContext().lookup("java:comp/env/jdbc/orcl");
if( o instanceof DataSource ) {
DataSource ds = (DataSource) o;
con = ds.getConnection();
LOGGER.debug("conn:" + con);
}
}catch( Exception e ) {
LOGGER.error(LogError.logError(e));
}

if( con == null ) {
throw new ConnectionException("Conn null");
}

return con;
}

还有我的过滤器:

try {
if( session.getAttribute(PARAM) == null ) {
conexao = ConnectionUtil.getConnection();
//call DAOS... (ommited)
}
}catch( Exception e ) {
LOGGER.error( LogError.logError(e) );
} finally {
try{
conexao.close();
conexao = null;
}catch( Exception e ){}
}

为了接收 NullPointerException,我认为来自 DataSource 的 getConnection() 正在重新获取一个仍在使用中的连接。

有一个静态同步方法从池中获取连接有问题吗?

空指针异常:

Statement st = conexao.createStatement();

编辑: 我现在正在尝试 tomcat-jdbc。他似乎更好地处理打开的连接,但在并发用户中仍然失败(相同的 NullPointerException 或有时 java.sql.SQLException:连接已关闭。)

最佳答案

经过一番努力,我发现我的 Spring Controller 中有一个 Connection 类型的私有(private)属性。我在我的方法中评论了这个属性并声明了连接,这解决了我的问题。

关于java - DBCP 池使用相同的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7419054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com