连接池连接数据库报Communications link failure错误

roader2046 2011-08-15 06:07:15
本地无错误,发布到服务器上报如下错误:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure Last packet sent to the server was 0 ms ago.)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at com.ycdx.zwzc.utils.BaseDao.getCon(BaseDao.java:163)
at com.ycdx.zwzc.utils.BaseDao.add(BaseDao.java:55)
at com.ycdx.zwzc.impl.ServiceTypeImpl.queryAllServiceType(ServiceTypeImpl.java:19)
at com.ycdx.zwzc.action.RequestAction.prepare(RequestAction.java:287)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:134)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1671)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
at sun.reflect.GeneratedConstructorAccessor32.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2120)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.GeneratedConstructorAccessor24.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
... 36 more

GOOGLE,百度若干,有说8小时连接超时的,我的链接肯定不会超时,有说把localhost改为127.0.0.1,也无效,求助大家!
...全文
15682 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
forestandriver23 2011-08-17
  • 打赏
  • 举报
回复
dbcp的连接池啊。增加些配置参数吧,比如: remove_abandoned=true;remove_abandoned_timeout=300;log_abandoned=true;test_on_borrow=true;
roader2046 2011-08-17
  • 打赏
  • 举报
回复
换c3p0了,明天再观察看看,错误经常出现在业务忙的时候,单机测试就不会出现,还应该是数据库连接的问题~~~
roader2046 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 leehomwong 的回复:]

连接池里的URL配置和listener里面的不一致,必须同为机器名或者同为IP地址发,是这样不?
[/Quote]
请教listener在哪里设置?我查了一下,tomcat的server.xml中listener,但是其属性只有className,并没有设置机器名的地方,请指教
roader2046 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 luohuijun619 的回复:]

数据库连接不上原因很多,lz看看是不是网络问题
[/Quote]
TOMCAT和MYSQL在一台机子上,而且是内网应用,感觉网络应该不是问题
roader2046 2011-08-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 forestandriver23 的回复:]

dbcp的连接池啊。增加些配置参数吧,比如: remove_abandoned=true;remove_abandoned_timeout=300;log_abandoned=true;test_on_borrow=true;
[/Quote]
增加了这些参数还是没有效果。。:(
luohuijun619 2011-08-17
  • 打赏
  • 举报
回复
数据库连接不上原因很多,lz看看是不是网络问题
LS1firesoar 2011-08-16
  • 打赏
  • 举报
回复
url是这样写的吧
url="jdbc:mysql://127.0.0.1:3306;DatabaseName=support"
LS1firesoar 2011-08-16
  • 打赏
  • 举报
回复
数据库连不上啊
roader2046 2011-08-16
  • 打赏
  • 举报
回复
顶起~~~
24K純帥 2011-08-16
  • 打赏
  • 举报
回复
连接池里的URL配置和listener里面的不一致,必须同为机器名或者同为IP地址发,是这样不?
roader2046 2011-08-16
  • 打赏
  • 举报
回复
求助~~~~~
roader2046 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bijanen19861113 的回复:]

数据库有没有连上,直接打印下看看不就知道了吗?你先打印了,然后再看看具体是哪里的问题,再具体解决咯
[/Quote]
数据库连上了啊,业务能正常使用,就是后台会报错。。。
bijanen19861113 2011-08-16
  • 打赏
  • 举报
回复
数据库有没有连上,直接打印下看看不就知道了吗?你先打印了,然后再看看具体是哪里的问题,再具体解决咯
roader2046 2011-08-16
  • 打赏
  • 举报
回复
额。。。是这个写法吗?是“/”吧
roader2046 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ls1firesoar 的回复:]

url是这样写的吧
url="jdbc:mysql://127.0.0.1:3306;DatabaseName=support"
[/Quote]额。。。是这个写法吗?是“/”吧
ggg957432 2011-08-15
  • 打赏
  • 举报
回复
表示看不出来,数据库连接写的好复杂,看不明白!顶起来,让高手解决
roader2046 2011-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 javaxiaochouyu 的回复:]

什么连接池 jar导入了没?
[/Quote]
tomcat连接池,在TOMCAT\LIB放入了mysql-connector-5.1.7.jar
Jeelon 2011-08-15
  • 打赏
  • 举报
回复
什么连接池 jar导入了没?
roader2046 2011-08-15
  • 打赏
  • 举报
回复
也说有可能是连接未关闭造成的,我的数据库操作是这么写的:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class BaseDao {
private static Connection con;
private static PreparedStatement ps;
private static ResultSet rs;
private static final String DriverClassName = "com.mysql.jdbc.Driver";
static {
try {
Class.forName(DriverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
*封装数据库的查操作
*
* @param c
* 反射类的对象
* @param sql
* 操作的查询SQL语句
* @param parameters
* 参数集,调用时无则写null
* @return list 集合
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws SQLException
* @throws InstantiationException
* @throws NamingException
*/
@SuppressWarnings("unchecked")
public static List add(Class c, String sql, List<String> parameters)
throws IllegalArgumentException, IllegalAccessException,
InvocationTargetException, InstantiationException, NamingException {
List<Object> list = new ArrayList<Object>();
Object o = null;
try {
con = getCon();
ps = con.prepareStatement(sql);
setParameter(parameters);
rs = ps.executeQuery();
// 得到列信息ResultSetMetaDate对象
ResultSetMetaData rsmd = rs.getMetaData();

// 创建一个String的数组,用来保存所有的列名
// rsmd.getColumnCount()为当前结果集中的列的总数,所以定义为长度
String[] cName = new String[rsmd.getColumnCount()];
for (int i = 0; i < cName.length; i++) {
cName[i] = rsmd.getColumnName(i + 1);
}

// 得到反射类中的所有的方法
Method[] methods = c.getMethods();

while (rs.next()) {
// 如果结果集得到了数据,则实例一个对象
o = c.newInstance();
for (int i = 0; i < cName.length; i++) {
for (Method m : methods) {
// 把从结果集中得到列名前面加上"set",并把第一位设置为大写,加上后面的,成为一个set的名称,
// 然后用反射得到的方法名与之比较,相同的话则激活此方法
if (m.getName().equals(
"set" + cName[i].substring(0, 1).toUpperCase()
+ cName[i].substring(1))) {
// 激活得到方法,并设置值
//System.out.println(rs.getObject(i + 1));
m.invoke(o, rs.getObject(i + 1));
}
}
}
// 添加到list集合中
list.add(o);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeRs(rs);
closePs(ps);
closeCon(con);
}


return list;
}

/**
* 封装数据库的增,删,改操作
*
* @param sql
* 操作的SQL语句
* @param parameters
* 参数集
* @return 影响行数
*/
public static int update(String sql, List<String> parameters) {
int result = 0;
try {
con = getCon();
ps = con.prepareStatement(sql);
setParameter(parameters);
//System.out.println(ps.toString());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeRs(rs);
closePs(ps);
closeCon(con);
}
return result;
}

/**
* 设置参数
*
* @param parameters
* 参数集
* @throws SQLException
* 抛出SQL异常
*/
private static void setParameter(List<String> parameters)
throws SQLException {
if (parameters != null && parameters.size() > 0) {
for (int i = 0; i < parameters.size(); i++) {
//System.out.println(parameters.get(i));
ps.setString(i + 1, parameters.get(i));
}
}
}

/**
* 得到Connection连接
*
* @return Connection连接
* @throws SQLException
* @throws NamingException
*/
public static Connection getCon() throws SQLException, NamingException {
InitialContext ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/zwzc");
con = ds.getConnection();
return con;
}

/**
* 关闭程序中的Connectin 连接
*
* @param con
* Connection对象
*/
public static void closeCon(Connection con) {
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

/**
* 关闭程序中PreparedStatement对象
*
* @param ps
* PreparedStatement对象
*/
public static void closePs(PreparedStatement ps) {
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

/**
* 关闭程序中ResultSet 对象
*
* @param rs
* ResultSet对象
*/
public static void closeRs(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

我的tomcat下context.xml文件是这么写的:

<Resource name="jdbc/zwzc"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="20"
maxIdle="20"
maxWait="10000"
username="root"
password="t2000vip"
url="jdbc:mysql://127.0.0.1:3306/support"
validationQuery="SELECT '1'"/>

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧