Upgrade to Liquibase 3.3.0

This commit updates Spring Boot to Liquibase 3.3.0 and makes the
necessary changes to Boot's PackageScanClassResolver.

Previously, when a class found by the scan could not be loaded a
warning message was logged. This commit lowers these to debug level,
bringing them into line with logging that the standard Liquibase
implementation does. It also avoids a warning always being logged at
startup due to Liquibase's WatchCommand$DynamicContentHandler which
depends on Jetty (an optional dependency of Liquibase).

Closes gh-1382
This commit is contained in:
Nathan Voxland 2014-10-21 15:43:36 -05:00 committed by Andy Wilkinson
parent a3d4e92d9f
commit ce4400291b
2 changed files with 17 additions and 11 deletions

View File

@ -92,7 +92,7 @@
<json-path.version>0.9.1</json-path.version>
<jstl.version>1.2</jstl.version>
<junit.version>4.11</junit.version>
<liquibase.version>3.0.8</liquibase.version>
<liquibase.version>3.3.0</liquibase.version>
<log4j.version>1.2.17</log4j.version>
<log4j2.version>2.0.2</log4j2.version>
<logback.version>1.1.2</logback.version>

View File

@ -17,11 +17,9 @@
package org.springframework.boot.liquibase;
import java.io.IOException;
import java.util.Set;
import liquibase.servicelocator.DefaultPackageScanClassResolver;
import liquibase.servicelocator.PackageScanClassResolver;
import liquibase.servicelocator.PackageScanFilter;
import org.apache.commons.logging.Log;
import org.springframework.core.io.Resource;
@ -48,16 +46,15 @@ public class SpringPackageScanClassResolver extends DefaultPackageScanClassResol
}
@Override
protected void find(PackageScanFilter test, String packageName, ClassLoader loader,
Set<Class<?>> classes) {
protected void findAllClasses(String packageName, ClassLoader loader) {
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(
loader);
try {
Resource[] resources = scan(loader, packageName);
for (Resource resource : resources) {
Class<?> candidate = loadClass(loader, metadataReaderFactory, resource);
if (candidate != null && test.matches(candidate)) {
classes.add(candidate);
Class<?> clazz = loadClass(loader, metadataReaderFactory, resource);
if (clazz != null) {
addFoundClass(clazz);
}
}
}
@ -80,12 +77,21 @@ public class SpringPackageScanClassResolver extends DefaultPackageScanClassResol
MetadataReader reader = readerFactory.getMetadataReader(resource);
return ClassUtils.forName(reader.getClassMetadata().getClassName(), loader);
}
catch (NoClassDefFoundError ex) {
handleFailure(resource, ex);
return null;
}
catch (Exception ex) {
if (this.logger.isWarnEnabled()) {
this.logger.warn("Ignoring cadidate class resource " + resource, ex);
}
handleFailure(resource, ex);
return null;
}
}
private void handleFailure(Resource resource, Throwable ex) {
if (this.logger.isDebugEnabled()) {
this.logger.debug("Ignoring candidate class resource " + resource
+ " due to " + ex);
}
}
}