2016-05-09 60 views
0

我正在使用spymemcached-2.8.4.jar和jdk.1.7。在java中捕獲memcache異常

這裏是我的代碼

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

您的控制檯是否打印 - 「發生異常」? 如果是這樣,那麼你已經捕獲異常,使用JDBC連接器連接到數據庫並堅持錯誤消息(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