eng*_*gma 1 spring hibernate transactions jdbc spring-mvc
我正在使用Spring MVC 3和Hibernate 3.6,我使用xml配置的事务管理,我的代码工作得很好但我的JDBC没有被发布,尽管它说它确实如此.
我用JProfiler检查了它,它说连接是打开的.
这是我的spring-config代码
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/parse_web?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root" />
<property name="password" value="miles106" />
<property name="initialSize" value="5"/>
<property name="maxActive" value="50000"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="ds" />
<property name="mappingResources">
<list>
<value>com/mubasher/parsewebpage/entities/Changes.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Owners.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Ownerships.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/TargetCompanies.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/TempData.hbm.xml</value>
<value>com/mubasher/parsewebpage/entities/Exceptions.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.connection.useUnicode">true</prop>
<prop key="hibernate.connection.characterEncoding">UTF-8</prop>
<prop key="hibernate.connection.charSet">UTF-8</prop>
<prop key="hibernate.connection.release_mode">after_statement</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这是我的调试代码
DEBUG [myExec-2](JDBCTransaction.java:223) - 重新启用自动提交DEBUG [myExec-2](JDBCTransaction.java:143) - 提交的JDBC连接DEBUG [myExec-2](ConnectionManager.java:427) - 积极地发布JDBC连接DEBUG [myExec-2](ConnectionManager.java:464) - 释放JDBC连接[(打开PreparedStatements:0,全局:0)(打开ResultSets:0,全局:0)] DEBUG [myExec-2](HibernateTransactionManager) .java:734) - 在事务DEBUG [myExec-2]之后关闭Hibernate Session [org.hibernate.impl.SessionImpl@52ab7af2](SessionFactoryUtils.java:789) - 关闭Hibernate会话
但在JProfiler中,我可以看到连接仍然打开,如您所见

这真的是让我遇到问题,我的应用程序正在进行大量的数据库工作,所以我需要在工作完成后立即关闭连接,我应该使用maxIdle吗?
连接未关闭,它们可以重复使用.这是commons-dbcp的全部目的,它代表数据库连接池.
建立新连接通常是一项昂贵的操作.所以DBCP正在做的是,不是关闭连接,而是将其保持打开状态并将其返回到连接池以供其他用途.
如果希望关闭每个请求并重新打开数据库连接,则需要使用不同的数据源(例如org.springframework.jdbc.datasource.SimpleDriverDataSource).
更新1:另请注意,在您的示例中,您将最大并行连接数(maxActive)设置为50000.这是一个极端数字(默认为8 !!!),IMO可能会导致很多问题.
更新2:maxIdle如果你不想摆脱游泳池,使用是一个好主意.但这不会让你免于"拥有非封闭连接".如果您正在考虑设置maxIdle=0,请完全删除池.
UPDAET 3:我只需要再次强调这一点 - 如果你需要50000个并行连接,那么你的代码确实有问题.
| 归档时间: |
|
| 查看次数: |
7646 次 |
| 最近记录: |