首页 > 技术文章 > Spring Boot配置文件中动态配置运行目录,jar包路径

yunmuq 2022-04-13 16:03 原文

在application.yml/properties中配置Spring Boot工作目录,配置动态变量

当我们想配置上传文件的路径时,如果不想写绝对路径,那么就可以配置动态变量

以yaml为例



方法一

使用user.dir,代码如下:

sub-file-path-win: \upload\
sub-file-path-unix: /upload/
file-path: ${user.dir}#{'${os.name}'.indexOf('Windows')>-1?'${sub-file-path-win}':'${sub-file-path-unix}'}

注意:user.dir为工作目录,即运行项目时所在的目录,并不是jar包所在的目录

比如,在idea中运行,user.dir是项目路径

当打成jar后,如果运行

[root@localhost ~]# java -jar ./test-0.0.1-SNAPSHOT.jar

那么结果是/root

如果运行

[root@localhost ~]# java -jar /home/springboot/test-0.0.1-SNAPSHOT.jar

那么结果仍是/root,因为运行java时的目录是~



方法二

使用ApplicationHome,代码如下:

sub-file-path-win: \upload\
sub-file-path-unix: /upload/
file-path: "#{(new org.springframework.boot.system.ApplicationHome(getClass())).getSource().getParentFile().toString()}#{'${os.name}'.indexOf('Windows')>-1?'${sub-file-path-win}':'${sub-file-path-unix}'}"

Java代码是:

(new org.springframework.boot.system.ApplicationHome(getClass())).getSource().getParentFile().toString()

这是真正的jar包路径,和运行命令时的路径无关

缺点一是在IDEA中运行springboot项目时,结果并不是项目路径,而是tomcat运行的地方:

C:\Users\UsersName\.m2\repository\org\springframework\spring-beans\5.3.18

二是ApplicationHome只能在springboot java代码中使用,而不能在单元测试test中使用

大家按需设置,或者做两套环境



推荐阅读