从servlet运行sql过程时的连接超时

时间:2014-12-17 07:17:21

标签: java sql-server servlets

我想运行一个大约需要15分钟才能在sql环境中运行的过程。而当我尝试使用Servlet运行它时,我收到网络错误(TCP错误)。我正在使用Http Server使用ajp将请求传输到Tomcat服务器。这是我的代码。任何人都可以告诉我这里出了什么问题。

    import com.itech.softensity.utils.Utils;
    import java.io.IOException;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.log4j.Logger;

    public class JdbcServlet extends HttpServlet
    {
    protected static Logger logger = Logger.getLogger(JdbcServlet.class);
    static final String jtdsurl =  "jdbc:jtds:sqlserver://<server_name>;instance=<instance>;DatabaseName=<databasename>;socketTimeout=100000;socketKeepAlive=true";
    static final String USER = "username";
    static final String PASS = "password";

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    Connection con = null;
    CallableStatement stmt = null;
    ResultSet result =null;
    try
    {
    Class.forName("net.sourceforge.jtds.jdbc.Driver");

    logger.info("Connecting to database...");
    con = DriverManager.getConnection(jtdsurl, "username","password");
    logger.info("Creating statement...");
    String sql = "exec populateMobRefLit";
    stmt = con.prepareCall(sql);
    stmt.setQueryTimeout(100000);
    stmt.executeQuery();
    logger.info("Executing stored procedure check new...");
    if(stmt != null){
    stmt.close();
    }
    if(con != null){
    con.close();
    }
      logger.info("Procedure run successfully values: ");
    }
   catch (Exception e) {

    try {
          if(stmt != null){
          stmt.close();
          }
          if(con != null){
          con.close();
          }
    }catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
      logger.info(Utils.stackTraceToString(e));
   }
   finally{

    try {
          if(stmt != null){
          stmt.close();
          }
          if(con != null){
          con.close();
          }
    }catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   }
 }

我已尝试使用JTDS驱动程序以及microsoft提供的jdbc驱动程序,因为驱动程序具有特定的超时。我试过Hibernate,我试过Spring,但没什么用。

0 个答案:

没有答案