データベースが稼働しているかどうかを確認するために、データベースを継続的に (30 秒ごとに) ポーリングする必要があるダッシュボード アプリケーションを開発しています。データベースが機能しているかどうかを確認するために、テーブルから 1 行だけを取得する簡単なクエリを作成しています。
すべて正常に動作しますが、問題は、サーブレットがデータベースへの接続を確立して行を取得するのに異常に長い時間がかかることです。このプロセスには約 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");
}