diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
index bd1caea..30d035c 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -14,6 +14,9 @@
 
 package com.ericsson.gerrit.plugins.highavailability;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.annotations.PluginName;
@@ -24,6 +27,8 @@
 
 @Singleton
 public class Configuration {
+  private static final Logger log = LoggerFactory.getLogger(Configuration.class);
+
   private static final int DEFAULT_TIMEOUT_MS = 5000;
   private static final int DEFAULT_MAX_TRIES = 5;
   private static final int DEFAULT_RETRY_INTERVAL = 1000;
@@ -46,14 +51,24 @@
     url = Strings.nullToEmpty(cfg.getString("url"));
     user = Strings.nullToEmpty(cfg.getString("user"));
     password = Strings.nullToEmpty(cfg.getString("password"));
-    connectionTimeout = cfg.getInt("connectionTimeout", DEFAULT_TIMEOUT_MS);
-    socketTimeout = cfg.getInt("socketTimeout", DEFAULT_TIMEOUT_MS);
-    maxTries = cfg.getInt("maxTries", DEFAULT_MAX_TRIES);
-    retryInterval = cfg.getInt("retryInterval", DEFAULT_RETRY_INTERVAL);
+    connectionTimeout = getInt(cfg, "connectionTimeout", DEFAULT_TIMEOUT_MS);
+    socketTimeout = getInt(cfg, "socketTimeout", DEFAULT_TIMEOUT_MS);
+    maxTries = getInt(cfg, "maxTries", DEFAULT_MAX_TRIES);
+    retryInterval = getInt(cfg, "retryInterval", DEFAULT_RETRY_INTERVAL);
     indexThreadPoolSize =
-        cfg.getInt("indexThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
+        getInt(cfg, "indexThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
     eventThreadPoolSize =
-        cfg.getInt("eventThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
+        getInt(cfg, "eventThreadPoolSize", DEFAULT_THREAD_POOL_SIZE);
+  }
+
+  private int getInt(PluginConfig cfg, String name, int defaultValue) {
+    try {
+      return cfg.getInt(name, defaultValue);
+    } catch (IllegalArgumentException e) {
+      log.error(String.format(
+          "invalid value for %s; using default value %d", name, defaultValue));
+      return defaultValue;
+    }
   }
 
   public int getConnectionTimeout() {
diff --git a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
index 10b4211..22f9792 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/highavailability/ConfigurationTest.java
@@ -15,13 +15,13 @@
 package com.ericsson.gerrit.plugins.highavailability;
 
 import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.when;
 
 import com.google.gerrit.server.config.PluginConfig;
 import com.google.gerrit.server.config.PluginConfigFactory;
 
-import com.ericsson.gerrit.plugins.highavailability.Configuration;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -93,6 +93,20 @@
     assertThat(configuration.getUrl()).isEqualTo(URL);
   }
 
+  @Test
+  public void testIllegalArgumentExceptionReturnDefaultValue() throws Exception {
+    when(configMock.getInt(anyString(), anyInt()))
+        .thenThrow(new IllegalArgumentException("some message"));
+
+    configuration = new Configuration(cfgFactoryMock, pluginName);
+    assertThat(configuration.getConnectionTimeout()).isEqualTo(5000);
+    assertThat(configuration.getSocketTimeout()).isEqualTo(5000);
+    assertThat(configuration.getMaxTries()).isEqualTo(5);
+    assertThat(configuration.getRetryInterval()).isEqualTo(1000);
+    assertThat(configuration.getIndexThreadPoolSize()).isEqualTo(1);
+    assertThat(configuration.getEventThreadPoolSize()).isEqualTo(1);
+  }
+
   private void buildMocks(boolean values) {
     when(configMock.getString("url")).thenReturn(values ? URL : null);
     when(configMock.getString("user")).thenReturn(values ? USER : null);
