繁体   English   中英

从Servlet连接到Oracle数据库需要很长时间

[英]Connecting to Oracle database from a Servlet takes a long time

我正在开发一个仪表板应用程序,在该应用程序中我需要连续(每30秒一次)轮询数据库以检查数据库是否已启动并正在运行。 为了找出数据库是否正常工作,我正在做一个简单的查询,仅从表中检索1行。

一切正常,但问题是servlet花了很长时间才能建立与数据库的连接并检索行。 此过程大约需要15秒。 我将相同的代码复制到Java文件中,以查明是否仍然需要花费大量时间。 但是,正如我怀疑的那样,java程序只需要1到2秒钟即可运行。 我处理整件事的方式似乎出了点问题。

我在doGet()函数中编写了数据库连接性代码,因为我需要反复轮询数据库。 这是我犯的错误吗? 我应该在init()中编写数据库连接性代码,而只是在doGet()函数中编写查询吗?

任何帮助将不胜感激。 谢谢

这是一部分代码,可以帮助您了解我的问题:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Send Request to DB CAT
LinkedHashMap<String,String> hm=new LinkedHashMap<String,String>();
   try
   {
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    //CONNECT TO DB
    String serverName = "*****.1dc.com"; // * is just to hide the real database name
    int port = 1535;
    String user = "mbank";
    String password = "****";
    String SID = "mbkwqa";
    String URL = "jdbc:oracle:thin:@" + serverName + ":" + port + ":" + SID;
    Connection conndb = DriverManager.getConnection(URL, user, password);
    String SQL = "select CITY from ADDRESS where rownum<=1";
    Statement stat = conndb.createStatement();
    ResultSet rs = stat.executeQuery(SQL);
    while (rs.next()) 
    {
        System.out.println(rs.getString(1));
    }
    stat.close();
    conndb.close(); 
    hm.put("Server1","OK");
    }
      catch(Exception e)
    {
        hm.put("Server1","Failed");         
    }   

您正在从doGet函数连接到数据库,这是非常糟糕的做法。 如果对servlet有100、1000、10000个请求,将会怎样?

您需要检查您的设计。

请创建到您的Oracle数据源的连接池,将其放入Servlet ApplicationContext中,创建Dao类,然后从doGet Servlet调用您的Dao类。

我相信这些教程会有所帮助:

http://balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html

在每次请求到来时都建立与数据库的连接不是一个好习惯。 您应该创建连接池,这将节省大量连接时间。 看一下tomcat连接池或Apache DBCP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM