Spring Boot配置文件中动态配置运行目录,jar包路径


在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中使用

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




免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM