我有一个项目,它使用自定义引导程序来启动Spring引导应用程序。引导程序用于提供内置的更新机制。因此,spring boot应用程序存储在预定义的文件夹中。如果更新,新版本将存储在同一目录中。在下一个应用程序启动时,引导程序将根据文件的版本号启动最新版本。
现在我想将Spring Boot应用程序更新到最新的Spring Boot 1.4.0版。有了这个,使用自定义引导程序时应用程序不再启动,因为它找不到包含的SSL证书(打包在spring引导应用程序中)。在没有自定义引导程序的情况下启动应用程序时,一切正常。
我想它与类加载器有关,因为包含证书的路径是错误的(!类之后):
Caused by: java.io.FileNotFoundException: JAR entry BOOT-INF/classes!/default-server-ssl.p12 not found in
引导程序的相关部分如下:
initializeEnvironment();
ensureTempDirExists();
//get the latest application version
File agentApplicationFile = applicationVersionLookup.getLatestVersion();
URL agentFileUrl = agentApplicationFile.toURI().toURL();
//add spring boot application to classpath and run spring boot application
ClassLoader loader = new URLClassLoader(new URL[]{agentFileUrl}, Thread.currentThread().getContextClassLoader());
Class<?> clazz = loader.loadClass("org.springframework.boot.loader.JarLauncher");
Method main = clazz.getMethod("main", String[].class);
main.invoke(null, new Object[]{new String[0]});
使用Spring Boot 1.3.6,这非常有效。 谢谢你的帮助。