2016-05-09 9 views
0

Я использую spymemcached-2.8.4.jar и jdk.1.7.Исключение исключения memcache в java

Вот мой код

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 после истекшего времени.