私はダッシュボードアプリケーションを開発しています。ここでは、データベースが稼働しているかどうかをチェックするためにデータベースを連続的に(30秒ごとに)ポーリングする必要があります。データベースが動作しているかどうかを調べるために、テーブルから1行だけを取得する簡単なクエリを作成しています。サーブレットからOracleデータベースに接続するのに時間がかかります
すべて正常に動作しますが、問題は、サーブレットがデータベースへの接続を確立して行を取得するために異常に長い時間がかかることです。このプロセスには約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");
}
Downvoter、ダウン投票の理由を残すようにしてください。それ以外の場合は、あなたの下降投票は、いかなる方法でも誰にも役立たない。 – CuriousCoder