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 a466ea35..b7df6934 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java @@ -687,7 +687,9 @@ public class HikariConfig implements HikariConfigMBean poolName = "HikariPool-" + poolNumber++; } - logConfiguration(); + if (LOGGER.isDebugEnabled()) { + logConfiguration(); + } } private void validateNumerics() @@ -733,15 +735,17 @@ public class HikariConfig implements HikariConfigMBean private void logConfiguration() { LOGGER.debug("HikariCP pool {} configuration:", poolName); - Set propertyNames = new TreeSet(PropertyBeanSetter.getPropertyNames(HikariConfig.class)); + final Set propertyNames = new TreeSet(PropertyBeanSetter.getPropertyNames(HikariConfig.class)); for (String prop : propertyNames) { try { Object value = PropertyBeanSetter.getProperty(prop, this); - prop = (prop + "................................................").substring(0, 32); - if (!prop.contains("password")) - { - LOGGER.debug(prop + (value != null ? value : "")); + if ("dataSourceProperties".equals(prop)) { + Properties dsProps = PropertyBeanSetter.copyProperties(dataSourceProperties); + dsProps.setProperty("password", ""); + value = dsProps; } + value = (prop.contains("password") ? "" : value); + LOGGER.debug((prop + "................................................").substring(0, 32) + (value != null ? value : "")); } catch (Exception e) { continue; diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java index 8d222397..8ac7b915 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java @@ -103,6 +103,15 @@ public final class PropertyBeanSetter } } + public static Properties copyProperties(Properties props) + { + Properties copy = new Properties(); + for (Object key : props.keySet()) { + copy.setProperty(key.toString(), props.get(key).toString()); + } + return copy; + } + private static void setProperty(Object target, String propName, Object propValue) { String capitalized = "set" + propName.substring(0, 1).toUpperCase() + propName.substring(1); diff --git a/hikaricp-java6/src/test/java/com/zaxxer/hikari/ConnectionStateTest.java b/hikaricp-java6/src/test/java/com/zaxxer/hikari/ConnectionStateTest.java index ed3e1ab4..3d6f8b00 100644 --- a/hikaricp-java6/src/test/java/com/zaxxer/hikari/ConnectionStateTest.java +++ b/hikaricp-java6/src/test/java/com/zaxxer/hikari/ConnectionStateTest.java @@ -17,6 +17,10 @@ public class ConnectionStateTest ds.setMaximumPoolSize(1); ds.setConnectionTestQuery("VALUES 1"); ds.setDataSourceClassName("com.zaxxer.hikari.mocks.StubDataSource"); + ds.addDataSourceProperty("user", "bar"); + ds.addDataSourceProperty("password", "secret"); + ds.addDataSourceProperty("url", "baf"); + ds.addDataSourceProperty("loginTimeout", "10"); try { diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java index dfacb84f..548899bf 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java @@ -687,7 +687,9 @@ public class HikariConfig implements HikariConfigMBean poolName = "HikariPool-" + poolNumber++; } - logConfiguration(); + if (LOGGER.isDebugEnabled()) { + logConfiguration(); + } } private void validateNumerics() @@ -733,15 +735,17 @@ public class HikariConfig implements HikariConfigMBean private void logConfiguration() { LOGGER.debug("HikariCP pool {} configuration:", poolName); - Set propertyNames = new TreeSet(PropertyBeanSetter.getPropertyNames(HikariConfig.class)); + final Set propertyNames = new TreeSet(PropertyBeanSetter.getPropertyNames(HikariConfig.class)); for (String prop : propertyNames) { try { Object value = PropertyBeanSetter.getProperty(prop, this); - prop = (prop + "................................................").substring(0, 32); - if (!prop.contains("password")) - { - LOGGER.debug(prop + (value != null ? value : "")); + if ("dataSourceProperties".equals(prop)) { + Properties dsProps = PropertyBeanSetter.copyProperties(dataSourceProperties); + dsProps.setProperty("password", ""); + value = dsProps; } + value = (prop.contains("password") ? "" : value); + LOGGER.debug((prop + "................................................").substring(0, 32) + (value != null ? value : "")); } catch (Exception e) { continue; diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java b/hikaricp/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java index 8d222397..8ac7b915 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/util/PropertyBeanSetter.java @@ -103,6 +103,15 @@ public final class PropertyBeanSetter } } + public static Properties copyProperties(Properties props) + { + Properties copy = new Properties(); + for (Object key : props.keySet()) { + copy.setProperty(key.toString(), props.get(key).toString()); + } + return copy; + } + private static void setProperty(Object target, String propName, Object propValue) { String capitalized = "set" + propName.substring(0, 1).toUpperCase() + propName.substring(1);