From 1e2f13389228f15c278258f4865d3b117a1578e8 Mon Sep 17 00:00:00 2001 From: Vladimir Tsanev Date: Mon, 23 Nov 2015 13:11:08 +0200 Subject: [PATCH] Use fast exceptions in findResource(s) Some libraries like aspectj are using findResource to see the raw bytecode of a class. It will even call findResource for every method of every class of beans that are post processed. This can be significant performance hit on startup when LaunchedURLClassLoader and there are a lot of nested jars. See gh-3640 Fixes gh-4557 --- .../boot/loader/LaunchedURLClassLoader.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java index 80ed0ca583f..533d67665d1 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/LaunchedURLClassLoader.java @@ -82,7 +82,13 @@ public class LaunchedURLClassLoader extends URLClassLoader { if (name.equals("") && hasURLs()) { return getURLs()[0]; } - return super.findResource(name); + Handler.setUseFastConnectionExceptions(true); + try { + return super.findResource(name); + } + finally { + Handler.setUseFastConnectionExceptions(false); + } } catch (IllegalArgumentException ex) { return null; @@ -94,7 +100,13 @@ public class LaunchedURLClassLoader extends URLClassLoader { if (name.equals("") && hasURLs()) { return Collections.enumeration(Arrays.asList(getURLs())); } - return super.findResources(name); + Handler.setUseFastConnectionExceptions(true); + try { + return super.findResources(name); + } + finally { + Handler.setUseFastConnectionExceptions(false); + } } private boolean hasURLs() { @@ -291,6 +303,6 @@ public class LaunchedURLClassLoader extends URLClassLoader { return this.localResources.nextElement(); } - }; + } }