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

Java 从Servlet连接到Oracle数据库需要很长时间,java,database,oracle,servlets,Java,Database,Oracle,Servlets,我正在开发一个仪表板应用程序,其中我需要连续(每30秒)轮询数据库,以检查数据库是否已启动并正在运行。为了确定数据库是否正常工作,我做了一个简单的查询,只从表中检索一行 一切正常,但问题是servlet需要异常长的时间来建立到数据库的连接并检索行。这个过程几乎需要15秒。我将相同的代码复制到一个java文件中,以确定它是否仍然需要那么多时间。但是,正如我所怀疑的,java程序只需要1到2秒钟就可以运行了。我处理这整件事的方式似乎有问题 我在doGet()函数中编写了数据库连接代码,因为我需要反复

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

一切正常,但问题是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");         
    }   
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
//向DB CAT发送请求
LinkedHashMap hm=新LinkedHashMap();
尝试
{
registerDriver(新的oracle.jdbc.driver.OracleDriver());
//连接到数据库
String serverName=“******.1dc.com”;//*仅用于隐藏真实的数据库名称
int端口=1535;
字符串user=“mbank”;
字符串密码=“****”;
字符串SID=“mbkwqa”;
String URL=“jdbc:oracle:thin:@”+serverName+:“+port+”:“+SID;
Connection conndb=DriverManager.getConnection(URL、用户、密码);

字符串SQL="选择CITY from ADDRESS where rownum这不是一个好的做法,每次请求到来时都要建立到DB的连接。您应该创建连接池,这将节省很多连接时间。请查看tomcat连接池或apache DBCP。

这不是一个好的做法,每次请求到来时都要建立到DB的连接。您可以r应该创建连接池,这将节省大量连接时间。看看tomcat连接池或apache DBCP。

您是从doGet函数连接到数据库的,这是非常糟糕的做法。如果您有100、1000、10000个请求到servlet,会发生什么

您需要检查您的设计

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

我相信这些教程将有助于:


您正在从doGet函数连接到数据库,这是一种非常糟糕的做法。如果您对servlet有100、1000、10000个请求,会发生什么情况

您需要检查您的设计

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

我相信这些教程将有助于:


Downvoter,请务必留下否决投票的原因。否则,你的否决投票对任何人都没有任何帮助。Downvoter,请务必留下否决投票的原因。否则,你的否决投票对任何人都没有任何帮助。