java - Spring 和编程式事务管理的连接池问题

标签 java multithreading spring transactions connection-pooling

我需要你的帮助来解决 Spring 的连接池问题。 我将 Spring 与 Java 1.4 结合使用(无注释)。

这是数据源和连接池定义:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
        <value>${database.jdbcName}</value>
    </property>
    <property name="url" value="jdbc:sybase:${database.url}">
    </property>
    <property name="username">
        <value>${database.username}</value>
    </property>
    <property name="password">
        <value>${database.password}</value>
    </property>
    <property name="maxActive">
         <value>${database.maxActive}</value>
    </property>
    <property name="maxIdle" >
         <value>${database.maxIdle}</value>
    </property>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>     
    <property name="hibernateProperties">
        <props>         
            <prop key="hibernate.dialect">org.hibernate.dialect.SybaseDialect</prop>
            <prop key="show_sql">true</prop>
            <prop key="hibernate.connection.release_mode">after_transaction</prop>  
            <prop key="hibernate.dbcp.maxWait">100000</prop>
            <prop key="hibernate.connection.autocommit">false</prop>
            <prop key="cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>             
        </props>
    </property>     
    ...     

当所有连接都处于 Activity 状态时,如果系统需要新连接,我会收到一条消息“正在打开 JDBC 连接”,并且所有进程都会停止。我不明白为什么所有线程都被锁定。

所有服务和 DAO 类都在 Spring 应用程序上下文中定义为单例。

有什么想法吗?

感谢您的帮助。

贝朗热

最佳答案

您对 maxActivemaxIdle 使用什么值?如果我知道这些值,我可以给您更明确的答案,但同时您也可以尝试将 hibernate.dbcp.maxWait 的值从 100000 更改为 1 并再次测试您的应用程序。

还要确保您没有意外地使某些 DAO 方法同步

关于java - Spring 和编程式事务管理的连接池问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3500486/

相关文章:

java - 如何删除 URL 中的参数?

java - Import-Package 语法不允许默认包 '.'

java - 如何让聊天程序服务器向所有连接的java客户端发送消息

java - 将包含数组的json字符串转换为Java中的Map

java - 使用 spring 在 Quartz 调度程序中完成作业后插入数据

java - 如何确保客户端-服务器应用程序中的通信安全?

java - 如何将字符串转换为日期 Java

c# - 是否可以根据条件设置临界区?

java - 记录线程内存泄漏

java - 这个类线程安全吗?如果不能,有人可以解释一个场景吗?