2016-05-09 4 views
0

私はspymemcached-2.8.4.jarとjdk.1.7を使用しています。ここでjavaでmemcache例外をキャッチ

は私のコードは私のscansionで

try { 

    MemcachedClient client = new MemcachedClient(...); 

    client.set('name', 1000, 'some_name'); 

}catch(Exception ex){ 
    System.out.println("Exception occurred"); 
    System.out.println(ex.getMessage()); 
    ex.printStackTrace(); 

    logExceptionInDB(ex); 
} 

で、それはコンソールで次の例外を印刷しているので、私のmemcachedのマシンが

java.net.ConnectException: Connection refused 
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:735) 
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:369) 
    at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:242) 
    at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:836) 

、実行されていないしかし、私はこれをキャッチしたいですそれをデータベースに書き込むことを除いて。この例外をキャッチするには?

+0

あなたは**例外をキャッチしています...あなたの望むように処理してください。 – Idos

+0

コンソールに「例外が発生しました」というメッセージが表示されますか? この場合、すでに例外が発生しています.DBBコネクタを使用してDBに接続し、エラーメッセージ(ex.getMessage())を保持します。 –

+0

実際には、実際には非同期呼び出しがFutureTaskを使用して実装されています。呼び出されたスレッドの内部では、例外をスローして何もスローしません。 – Nageswaran

答えて

1

それはすでに自身spymemcached、あなただけのログを見ることができ、MemcachedConnection.javaの関連コードがでキャッチされたとしてあなたは、ポストで述べた例外をキャッチすることはできません。

catch (ConnectException var5) { 
      this.getLogger().info("Reconnecting due to failure to connect to %s", new Object[]{node, var5}); 
      this.queueReconnect(node); 
     } 

それはしようとします後で再接続するには、設定が正しいことを確認してください。
実は、あなたがset方法により製造された例外をキャッチすることができます

OperationFuture<Boolean> future = client.set("name", 1000, "some_name"); 
    Boolean result = future.get(50, TimeUnit.MILLISECONDS); 

を一つの操作のためのあなたのタイムアウト時間は50ミリ秒である、あなたは時間経過後CheckedOperationTimeoutExceptionを取得すると仮定します。