当通过java -jar或者命令行mvn spring-boot:run的方式启动springboot项目时,会引导执行如下代码:
public static void main(String[] args) throws Exception {
new JarLauncher().launch(args);
}
调用JarLauncher不带参数的构造方法创建JarLauncher对象,根据Java的继承特性会调用父类中的createArchive方法,官方代码实现如下:
protected final Archive createArchive() throws Exception {
ProtectionDomain protectionDomain = getClass().getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URI location = (codeSource != null) ? codeSource.getLocation().toURI() : null;
String path = (location != null) ? location.getSchemeSpecificPart() : null;
if (path == null) {
throw new IllegalStateException("Unable to determine code source archive");
}
File root = new File(path);
if (!root.exists()) {
throw new IllegalStateException("Unable to determine code source archive from " + root);
}
return (root.isDirectory() ? new ExplodedArchive(root) : new JarFile
Spring Boot应用中获取类路径的深入理解

本文探讨了在Spring Boot应用中,通过`getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getSchemeSpecificPart()`来获取类路径的方法。分析了在不同启动方式(java -jar, mvn spring-boot:run)和打包类型(jar包,作为第三方依赖)下,该代码返回路径的不同,并解释了这些路径的含义。"
102646218,5722146,SpringCloud Ribbon实战:自定义RandomRule实现均衡策略,"['微服务', 'SpringCloud Ribbon', '负载均衡', '策略算法']
最低0.47元/天 解锁文章
1917

被折叠的 条评论
为什么被折叠?



