Spring Boot 项目获取项目 / jar 运行目录的方法
AI 摘要
文章给出两种在 Spring Boot 中动态获取 jar 运行目录的方法,分别基于 ResourceUtils 与 ClassLoader 的 getResource,经简单字符串处理即可得到 jar 所在路径,方便将 Logback 日志输出到与 jar 同级目录,兼容 Windows 与 Linux。
近期有一个 Spring Boot 的项目要整合 Logback,考虑到一些强迫症的原因,想要把日志文件输出到和 jar 包同一目录下,此时需要思考如何获取项目 jar 的运行目录,能拿到项目 jar 的运行目录,Logback 输出文件就没什么大问题了。
解决方案 1:
private static String getResourceBasePath() {
File path = null;
try {
path = new File(ResourceUtils.getURL("classpath:").getPath());
} catch (FileNotFoundException e) {
}
if (path == null || !path.exists()) {
path = new File("");
}
String pathStr = path.getAbsolutePath();
pathStr = pathStr.replace("\\target\\classes", "");
return pathStr;
}Windows 环境下通过 IDEA 运行项目后获取到的目录:F:\项目名称
Linux 环境下通过 jar 运行项目后获取到的目录:/www/wwwroot/项目名称
解决方案 2:
private static String getResourceBasePath() {
try {
String path = URLDecoder.decode(Objects.requireNonNull(LogbackContextListener.class.getResource("/")).getPath(), String.valueOf(StandardCharsets.UTF_8));
if (path.startsWith("file:")) {
int i = path.indexOf(".jar!");
path = path.substring(0, i);
path = path.replaceFirst("file:", "");
}
return new File(path).getParentFile().getAbsolutePath();
} catch(Exception ex) {
return "";
}
}Windows 环境下通过 IDEA 运行项目后获取到的目录:F:\项目名称\target
Linux 环境下通过 jar 运行项目后获取到的目录:/www/wwwroot/项目名称
如无特殊说明,网站中的系列文章均为作者「@多仔」原创编辑,版权归作者「@多仔」所有,资源引用部分已注明来源,AIGC 创作部分已注明标识,拒绝未经授权的任何个人或组织以任何形式转载、复制、修改、发布或用于商业目的。
文章中可能会存在些许错别字内容描述不完整、表述不准确、排版布局异常等问题,文章中提及的软件、依赖、框架等程序可能随其版本更新迭代而产生变化,文章中的相关代码片段、例图、文本等内容仅供参考。
如若转载,请注明出处:https://www.duox.dev/post/51.html
文章中可能会存在些许错别字内容描述不完整、表述不准确、排版布局异常等问题,文章中提及的软件、依赖、框架等程序可能随其版本更新迭代而产生变化,文章中的相关代码片段、例图、文本等内容仅供参考。
如若转载,请注明出处:https://www.duox.dev/post/51.html