MySQL - JAVA Store程序有时会消失

时间:2016-01-28 03:54:47

标签: java mysql jdbc tomcat7 database-connection

我遇到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;

        }

如何在不重新启动的情况下让我的应用程序继续工作?

最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。我必须进行往返以保持所有连接实例都处于活动状态。这可以通过添加简单的SQL“select 1”作为测试属性,通过conf / context.xml中的数据源配置来完成。