Java 如何使用Hibernate处理max数据库连接?
下面是Hibernate.xml中的Hibernate配置Java 如何使用Hibernate处理max数据库连接?,java,mysql,spring,hibernate,c3p0,Java,Mysql,Spring,Hibernate,C3p0,下面是Hibernate.xml中的Hibernate配置 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.c3p0.timeout">300</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
.....
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
和项目的其他代码(代码2)
以上两个代码我在项目中使用。我的问题是需要遵循哪种编码?代码1或代码2以避免最大连接错误。?我最多可以连接1000个数据库连接。但在某些情况下,它将超过1000。所以我想保持数据库连接最少。
请指导我。使用1000个数据库连接听起来不是个好主意。每个额外的数据库连接都需要额外的RAM,并增加并发问题(死锁)的可能性 由于您使用C3P0,因此应具有最大连接大小:
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
5
20
如果连接耗尽,则可能是因为:
- 您没有关闭Hibernate
,关联的JDBC连接也不会释放到池中会话
- 您的查询执行时间太长,因此它们释放连接的速度不够快
- 第一个示例与Spring提供的自动会话管理支持相矛盾。当您使用Spring时,您不应该自己管理Hibernate会话。您应该让事务管理器在新事务边界上调用相应的Hibernate初始化回调 在您的示例中,如果会话引发异常,会话将不会关闭,并且连接可能悬空。这是因为您没有使用try/finally块来释放会话
- 第二个示例更好,但您需要将其包装到一个
服务中@Transactional
Query executeQuery = getSession().createQuery(hql);
UserProfileuser = (UserProfile) executeQuery.uniqueResult();
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>