diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java
index e4dd5376..de06592e 100644
--- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java
+++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java
@@ -19,6 +19,7 @@ package com.zaxxer.hikari;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.Connection;
@@ -125,7 +126,9 @@ public class HikariConfig implements HikariConfigMBean
}
/**
- * Construct a HikariConfig from the specified property file name.
+ * Construct a HikariConfig from the specified property file name. propertyFileName
+ * will first be treated as a path in the file-system, and if that fails the
+ * ClassLoader.getResourceAsStream(propertyFileName) will be tried.
*
* @param propertyFileName the name of the property file
*/
@@ -133,17 +136,18 @@ public class HikariConfig implements HikariConfigMBean
{
this();
- File propFile = new File(propertyFileName);
- if (!propFile.isFile()) {
- throw new IllegalArgumentException("Property file " + propertyFileName + " was not found.");
- }
-
+ final File propFile = new File(propertyFileName);
try {
- FileInputStream fis = new FileInputStream(propFile);
- Properties props = new Properties();
- props.load(fis);
- PropertyBeanSetter.setTargetFromProperties(this, props);
- fis.close();
+ final InputStream is = propFile.isFile() ? new FileInputStream(propFile) : this.getClass().getResourceAsStream(propertyFileName);
+ if (is != null) {
+ Properties props = new Properties();
+ props.load(is);
+ is.close();
+ PropertyBeanSetter.setTargetFromProperties(this, props);
+ }
+ else {
+ throw new IllegalArgumentException("Property file " + propertyFileName + " was not found.");
+ }
}
catch (IOException io) {
throw new RuntimeException("Error loading properties file", io);
@@ -360,6 +364,9 @@ public class HikariConfig implements HikariConfigMBean
@Override
public void setIdleTimeout(long idleTimeoutMs)
{
+ if (idleTimeout < 0) {
+ throw new IllegalArgumentException("idleTimeout cannot be negative");
+ }
this.idleTimeout = idleTimeoutMs;
}
@@ -549,7 +556,7 @@ public class HikariConfig implements HikariConfigMBean
public void setMinimumIdle(int minIdle)
{
if (minIdle < 0) {
- throw new IllegalArgumentException("maxPoolSize cannot be negative or greater than maximumPoolSize");
+ throw new IllegalArgumentException("minimumIdle cannot be negative");
}
this.minIdle = minIdle;
}
@@ -721,20 +728,12 @@ public class HikariConfig implements HikariConfigMBean
if (connectionTimeout == Integer.MAX_VALUE) {
logger.warn("No connection wait timeout is set, this might cause an infinite wait");
}
- else if (connectionTimeout < TimeUnit.MILLISECONDS.toMillis(250)) {
- logger.warn("connectionTimeout is less than 250ms, did you specify the wrong time unit? Using default instead");
- connectionTimeout = CONNECTION_TIMEOUT;
- }
if (minIdle < 0 || minIdle > maxPoolSize) {
minIdle = maxPoolSize;
}
- if (idleTimeout < 0) {
- logger.error("idleTimeout cannot be negative.");
- throw new IllegalArgumentException("idleTimeout cannot be negative");
- }
- else if (idleTimeout < TimeUnit.SECONDS.toMillis(30) && idleTimeout != 0) {
+ if (idleTimeout < TimeUnit.SECONDS.toMillis(30) && idleTimeout != 0) {
logger.warn("idleTimeout is less than 30000ms, did you specify the wrong time unit? Using default instead");
idleTimeout = IDLE_TIMEOUT;
}
diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java
index 0b83d51f..588ae2f7 100644
--- a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java
+++ b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java
@@ -19,6 +19,7 @@ package com.zaxxer.hikari;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.sql.Connection;
@@ -125,7 +126,9 @@ public class HikariConfig implements HikariConfigMBean
}
/**
- * Construct a HikariConfig from the specified property file name.
+ * Construct a HikariConfig from the specified property file name. propertyFileName
+ * will first be treated as a path in the file-system, and if that fails the
+ * ClassLoader.getResourceAsStream(propertyFileName) will be tried.
*
* @param propertyFileName the name of the property file
*/
@@ -133,17 +136,16 @@ public class HikariConfig implements HikariConfigMBean
{
this();
- File propFile = new File(propertyFileName);
- if (!propFile.isFile()) {
- throw new IllegalArgumentException("Property file " + propertyFileName + " was not found.");
- }
-
- try {
- FileInputStream fis = new FileInputStream(propFile);
- Properties props = new Properties();
- props.load(fis);
- PropertyBeanSetter.setTargetFromProperties(this, props);
- fis.close();
+ final File propFile = new File(propertyFileName);
+ try (final InputStream is = propFile.isFile() ? new FileInputStream(propFile) : this.getClass().getResourceAsStream(propertyFileName)) {
+ if (is != null) {
+ Properties props = new Properties();
+ props.load(is);
+ PropertyBeanSetter.setTargetFromProperties(this, props);
+ }
+ else {
+ throw new IllegalArgumentException("Property file " + propertyFileName + " was not found.");
+ }
}
catch (IOException io) {
throw new RuntimeException("Error loading properties file", io);
@@ -360,6 +362,9 @@ public class HikariConfig implements HikariConfigMBean
@Override
public void setIdleTimeout(long idleTimeoutMs)
{
+ if (idleTimeout < 0) {
+ throw new IllegalArgumentException("idleTimeout cannot be negative");
+ }
this.idleTimeout = idleTimeoutMs;
}
@@ -548,8 +553,8 @@ public class HikariConfig implements HikariConfigMBean
@Override
public void setMinimumIdle(int minIdle)
{
- if (minIdle < 0 || minIdle > maxPoolSize) {
- throw new IllegalArgumentException("maxPoolSize cannot be negative or greater than maximumPoolSize");
+ if (minIdle < 0) {
+ throw new IllegalArgumentException("minimumIdle cannot be negative");
}
this.minIdle = minIdle;
}
@@ -721,20 +726,12 @@ public class HikariConfig implements HikariConfigMBean
if (connectionTimeout == Integer.MAX_VALUE) {
logger.warn("No connection wait timeout is set, this might cause an infinite wait");
}
- else if (connectionTimeout < TimeUnit.MILLISECONDS.toMillis(250)) {
- logger.warn("connectionTimeout is less than 250ms, did you specify the wrong time unit? Using default instead");
- connectionTimeout = CONNECTION_TIMEOUT;
- }
- if (minIdle < 0) {
+ if (minIdle < 0 || minIdle > maxPoolSize) {
minIdle = maxPoolSize;
}
- if (idleTimeout < 0) {
- logger.error("idleTimeout cannot be negative.");
- throw new IllegalArgumentException("idleTimeout cannot be negative");
- }
- else if (idleTimeout < TimeUnit.SECONDS.toMillis(30) && idleTimeout != 0) {
+ if (idleTimeout < TimeUnit.SECONDS.toMillis(30) && idleTimeout != 0) {
logger.warn("idleTimeout is less than 30000ms, did you specify the wrong time unit? Using default instead");
idleTimeout = IDLE_TIMEOUT;
}