我遇到MySQL和JAVA Web应用程序的问题。我在mysql中创建了存储过程sp_doWriteLogTrans,它与我的tomcat一起工作得非常好。
然而,当tomcat服务器闲置一段时间(没有任何请求)(1天)之后,我发出新请求
到JAVA Web应用程序,它总是显示错误。
setContentView()
我不知道为什么会发生这种异常。但是当我重新启动tomcat时。它再次恢复工作。
这是我与mysql进行通信的java代码
Jan 28, 2016 9:24:09 AM com.sun.xml.ws.server.sei.TieHandler createResponse
SEVERE: FUNCTION sp_doWriteLogTrans does not exist
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION sp_doWriteLogTrans does not exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
这是MySQLDB类的连接方法
MySQLDB mydb = new MySQLDB();
mydb.connect();
String sql = "{call sp_doWriteLogTrans(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement call = mydb.conn.prepareCall(sql);
call.setString(1, type);
call.setString(2, value1);
call.setString(3, value2);
call.setString(4, value3);
call.setString(5, value4);
call.setString(6, value5);
call.setString(7, value6);
call.setString(8, value7);
call.setString(9, value8);
call.setString(10, value9);
call.setString(11, value10);
call.setString(12, value11);
call.setString(13, value12);
call.setString(14, value13);
call.setString(15, value14);
call.setString(16, value15);
call.setString(17, value16);
call.setString(18, value17);
call.setString(19, logno_ref);
call.setString(20, command);
call.registerOutParameter(21, Types.INTEGER);
call.execute();
String logno = call.getString(21);
mydb.disconnect();
我也已经将tomcat配置为像这样使用连接池
在conf / context.xml中
public boolean connect() {
// Get a context for the JNDI look up
Context ctx;
try {
ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:/comp/env");
javax.sql.DataSource ds = (javax.sql.DataSource) envContext.lookup ("jdbc/mysql");
conn = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
如何在不重新启动的情况下让我的应用程序继续工作?
最诚挚的问候,
答案 0 :(得分:0)
最后,我找到了解决方案。我必须进行往返以保持所有连接实例都处于活动状态。这可以通过添加简单的SQL“select 1”作为测试属性,通过conf / context.xml中的数据源配置来完成。