Java 使用dbcp 2连接超时
我在项目中使用struts 1.2、hibernate 3、spring 2和tomcat作为服务器。我已经使用dbcp 2(jdk版本1.7.0_03)实现了连接池。我使用MySql作为数据库。尽管实现了dbcp2,但连接每天都会超时。我得到以下例外情况Java 使用dbcp 2连接超时,java,mysql,spring,hibernate,struts,Java,Mysql,Spring,Hibernate,Struts,我在项目中使用struts 1.2、hibernate 3、spring 2和tomcat作为服务器。我已经使用dbcp 2(jdk版本1.7.0_03)实现了连接池。我使用MySql作为数据库。尽管实现了dbcp2,但连接每天都会超时。我得到以下例外情况 org.hibernate.transaction.JDBCTransaction - ERROR - JDBC begin failed com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientCo
org.hibernate.transaction.JDBCTransaction - ERROR - JDBC begin failed
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.Util.getInstance(Util.java:381)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ConnectionImpl.getMutex(ConnectionImpl.java:3015)
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4789)
at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:496)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:322)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:255)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:615)
at com.tcg.service.user.UserService$$EnhancerByCGLIB$$dc6eec0f.getUserDetails(<generated>)
at com.tcg.delegate.user.UserDelegate.getUserDetails(UserDelegate.java:127)
at com.tcg.common.CommonUtil.InactiveUser(CommonUtil.java:209)
at com.tcg.util.AutomatedProcess.run(AutomatedProcess.java:54)
at java.lang.Thread.run(Thread.java:722)
org.hibernate.transaction.JDBCTransaction-错误-JDBC开始失败
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Connection.close()已被调用。此状态下的操作无效。
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:525)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:406)
位于com.mysql.jdbc.Util.getInstance(Util.java:381)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
位于com.mysql.jdbc.ConnectionImpl.getMutex(ConnectionImpl.java:3015)
位于com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4789)
位于org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237)
位于org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:63)
位于org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
位于org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:496)
位于org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:322)
在org.springframework.transaction.interceptor.TransactionSpectSupport.CreateTransactionIfEssential(TransactionSpectSupport.java:255)上
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:176)上
位于org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:615)
在com.tcg.service.user.UserService$$enhancerbyglib$$dc6eec0f.getUserDetails()上
在com.tcg.delegate.user.UserDelegate.getUserDetails(UserDelegate.java:127)上
位于com.tcg.common.CommonUtil.InactiveUser(CommonUtil.java:209)
位于com.tcg.util.AutomatedProcess.run(AutomatedProcess.java:54)
运行(Thread.java:722)
我在谷歌上搜索解决方案,但建议的解决方案无法解决我的问题
这是我的hibernate配置文件:
<hibernate-configuration>
<session-factory name="hibernate.session-factory.SRS">
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<property name="hibernate.default_schema">ITSDEV</property>
<property name="show_sql">false</property>
<property name="hibernate.jdbc.batch_size">10</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<property name="hibernate.cache.use_query_cache">false</property>
</session-factory>
</hibernate-configuration>
org.hibernate.transaction.jdbc事务工厂
org.hibernate.dialogue.mysql5dialogue
org.hibernate.cache.HashtableCacheProvider
ITSDEV
错误的
10
错误的
错误的
这是我的应用程序上下文文件:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- My SQL database Connection -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://172.20.25.185:3306/itsdev"/>
<property name="username" value="itsdev"/>
<property name="password" value="itsdev"/>
</bean>
</beans>
下面是我在应用程序中使用的示例DAO类:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.tcg.common.CommonUtil;
import com.tcg.dto.ItsUserMaster;
public class CopyOfLoginCheckDAO extends HibernateDaoSupport{
@SuppressWarnings({ "unchecked"})
public boolean CheckCredentials(String loginId, String password, Map map) {
boolean retVal = false;
List<ItsUserMaster> userData = new ArrayList<ItsUserMaster>();
try{
HibernateTemplate template = getHibernateTemplate();
userData=template.find("from ItsUserMaster itsUserMaster where itsUserMaster.loginId='"+loginId+"' and itsUserMaster.loginCred='Y' and itsUserMaster.deleteFlag!='Y' and itsUserMaster.active!='I' and itsUserMaster.itsCorporateMaster.active!='I' and itsUserMaster.itsCorporateMaster.deleteFlag!='Y' and itsUserMaster.itsUserTypeMaster.deleteFlag!='Y' and itsUserMaster.itsUserTypeMaster.active!='I' and itsUserMaster.itsDepartmentMaster.active!='I' and itsUserMaster.itsDepartmentMaster.deleteFlag!='Y'");
if(userData.size()>0){
ItsUserMaster itsUserMaster = (ItsUserMaster)userData.get(0);
String pwd = CommonUtil.decode(itsUserMaster.getPassword().toString());
String loginCred=itsUserMaster.getLoginCred().toString();
if(loginCred.equalsIgnoreCase("Y")){
retVal = true;
}
}
} catch (Exception sqlexcep) {
sqlexcep.printStackTrace();
retVal = false;
System.out.println("Exception occured while getting Connection to the database");
}
return retVal;
}
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
导入org.springframework.orm.hibernate3.HibernateTemplate;
导入org.springframework.orm.hibernate3.support.HibernateDaoSupport;
导入com.tcg.common.CommonUtil;
导入com.tcg.dto.ItsUserMaster;
公共类CopyOfLoginCheckDAO扩展了HibernateDaoSupport{
@SuppressWarnings({“unchecked”})
公共布尔检查凭据(字符串loginId、字符串密码、映射){
布尔retVal=false;
List userData=new ArrayList();
试一试{
HibernateTemplate=getHibernateTemplate();
userData=template.find(“从ITSUERMaster到ITSUERMaster,其中ITSUERMaster.loginId=”+loginId+"'和itsUserMaster.loginCred='Y'和itsUserMaster.deleteFlag!='Y'和itsUserMaster.active!='I'和itsUserMaster.itsCorporateMaster.active!='I'和itsUserMaster.itsCorporateMaster.deleteFlag!='Y'和itsUserMaster.itsUserTypeMaster.active!='I'和itsUserMaster.itsDepartmentMaster.active!='I'以及它的usermaster.itsDepartmentMaster.deleteFlag!=“Y”);
如果(userData.size()>0){
ItsUserMaster ItsUserMaster=(ItsUserMaster)userData.get(0);
String pwd=CommonUtil.decode(itsUserMaster.getPassword().toString());
字符串loginCred=itsUserMaster.getLoginCred().toString();
if(登录等信号案例(“Y”)){
retVal=true;
}
}
}捕获(异常SQLEXEP){
sqlexep.printStackTrace();
retVal=false;
System.out.println(“连接到数据库时发生异常”);
}
返回返回;
}
}
如果您需要更多信息,请告诉我。我感谢您的帮助。谢谢。您能提供您的DAO类吗?您是否在所有DAO方法或任何特定方法中都遇到了问题?我在所有DAO类中都遇到了问题,例如,我甚至无法登录到我的应用程序。我已经在问题中添加了DAO类。您的hibernate和spring相对于jdbc驱动程序来说太旧。请返回JDBC3,或者从应用程序中删除hibernate和spring,然后使用本机JDBC4。