diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java index 60ad720104..7474567043 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java @@ -39,6 +39,7 @@ import org.springframework.util.StringUtils; * @author Dave Syer * @author Maciej Walkowiak * @author Stephane Nicoll + * @author Benedikt Ritter * @since 1.1.0 */ @ConfigurationProperties(prefix = DataSourceProperties.PREFIX) @@ -161,8 +162,8 @@ public class DataSourceProperties implements BeanClassLoaderAware, EnvironmentAw public String getDriverClassName() { if (StringUtils.hasText(this.driverClassName)) { - Assert.state(ClassUtils.isPresent(this.driverClassName, null), - "Cannot load driver class: " + this.driverClassName); + Assert.state(driverClassIsLoadable(), "Cannot load driver class: " + + this.driverClassName); return this.driverClassName; } String driverClassName = null; @@ -182,6 +183,20 @@ public class DataSourceProperties implements BeanClassLoaderAware, EnvironmentAw return driverClassName; } + private boolean driverClassIsLoadable() { + try { + ClassUtils.forName(this.driverClassName, null); + return true; + } + catch (UnsupportedClassVersionError ex) { + // Driver library has been compiled with a later JDK, propagate error + throw ex; + } + catch (Throwable ex) { + return false; + } + } + public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; }