2011年7月14日木曜日

MySQLサーバーへの生死確認(タイムアウト値の設定)

サーバー環境:
アプリケーションサーバー:アパッチ
SQLサーバー:MySQL 5.1
↑これはXamppを導入したもの


開発環境:
Windows Vista Home
eclipse 3.5(ガリレオ)
ADT_今日の時点で最新の物(バージョン不明)
JavaSDK 1.6.0_24
AndroidSDK_r11
開発・ターゲットVer=Android2.1


テスト環境:
テスト媒体:エミュレータ
↑SDK ManagerでVer2.1のHVGAで作成


事前準備:
プロジェクトフォルダに「libs」と言う名前のフォルダを作成した
そこに、MySQLコネクタjarファイルを入れる
eclipse上からプロジェクトのプロパティで上記のビルドパスを通した
その時、「外部JARの追加」ではなく「JARの追加」で行った


今回はマシンの構成とかサーバー構成とかは関係ない。

MySQLサーバーに接続しようとしたらサーバの電源が入ってなく、接続結果の応答も30秒位ない。

これでは、長すぎるので自分でタイムアウトを設定したい。


・最初に書いてあったコード

import java.sql.*;

Class.forName("com.mysql.jdbc.Driver");
String url = String strCon = "jdbc:mysql://192.168.0.1:3306/pos_manage";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();

これがタイムアウトするまでにかなり待たされる。

これで調べたら、「DriverManager.setLoginTimeout(seconds)」と言うのがあったので設定してみたが、変わらず。

さらに調べた結果、「DriverManager」を使うのが良くないとの事。


・次にに書いたコード

Class driverClass = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)driverClass.newInstance();
Properties prpt = new Properties();
prpt.put("user", "root");
prpt.put("password", "123");
prpt.put("connectTimeout", "10000");//多分DBサーバーへの接続タイムアウト
prpt.put("socketTimeout", "10000"); //多分ネットワークタイムアウト
prpt.put("autoReconnect", "false"); //タイムアウトしたら再接続するか
conn = driver.connect(strCon, prpt);

こんな感じでやれと、ネットに書いてあったがやはりダメ。

まずはサーバーの電源が入ってない事による通信タイムアウトを設定したい。

上記のコードはあくまでもSQLオブジェクト。

電源が入ってても何らかの原因で通信できなくなった時の事も含まれる。

そこで考えたのが、単純にサーバーが通信できる状態にあるかどうかだけ確認する。


・最終コード

// テスト用のURLを作成
//XamppにはApatchが入っててMySQLと一緒に起動している前提
URL urlTest = new URL("http://192.168.0.1");
// MySQLサーバー接続用オブジェクトの作成
URLConnection connection =  (HttpURLConnection)urlTest.openConnection();
// タイムアウト値の設定
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
// 接続開始
// タイムアウトになったらExceptionが発生する
connection.connect();


通信できる状態なのかの確認だけならこれでOK

 

  ↓クリックで、このブログの評価が上がり執筆者が喜びます
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
  にほんブログ村

0 件のコメント: