因为使用IntelliJ IDEA的URLClassLoader而未初始化Spring Boot DevTools
我有一个使用Spring Platfrom 1.3.3.RELEASE的Spring Boot应用程序。因为使用IntelliJ IDEA的URLClassLoader而未初始化Spring Boot DevTools
在我的开发环境中,我将它作为“Spring Boot Application”类型的运行配置在IntelliJ IDEA 15中启动。最近,我添加了'org.springframework.boot:spring-boot-devtools'以用于类重新加载,如https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html所述。
它起初工作,但最近我注意到从IDEA重新加载类停止工作。
经过一番调试后,我发现LocalDevToolsAutoConfiguration注释了@ConditionalOnInitializedRestarter,在这里失败 return ConditionOutcome.noMatch("Restarter initialized without URLs");
。
的网址是空的,因为它初始化的URL的DefaultRestartInitializer
有以下条件: return thread.getName().equals("main") && thread.getContextClassLoader() .getClass().getName().contains("AppClassLoader");
不幸的是,thread.getContextClassLoader().getClass().getName()
返回URLClassLoader
我,而不是AppClassLoader
。
现在,我不确定什么可能是错误的,以及如何重新加载应该工作。我的应用程序/ IDE是否使用错误的类加载器?还是春天有虫子?
我终于找到了“错误”类加载器的原因。
它在IntelliJ IDEA的“动态类路径”功能: <property name="dynamic.classpath" value="true" />
如果是残疾人,Reloader正确初始化。
重新启动程序应具有哪些正确的URL?地雷是空的(并且重新开始不会开始)。 使用URL []启动应用程序xx.demo.starter.StarterApplication – razor
可能相关:https://github.com/spring-projects/spring-boot/issues/3315 – vlastikcz