0%

spring boot | 路径解析

这里讲一下 spring boot 中的路径。

  • classpath
  • file

参考资料



开发环境


  • maven

classpath


src 路径下的文件 在编译后都会放到 target/classes 路径下。默认 classpath 就是指这里。

classpath 等价于 main/java + main/resources + 第三方 jar包 的根目录。

例子

src/java/resources 中,创建一个 test 文件夹,里面的文件名字是 test.yml

然后,启动的时候,其参数如下

spring.config.location=classpath:/test/test.yml

使用注解

@PropertySource(value = {"classpath:/test/test.yml"})

ps: 如果指定好 spring.config.location 后,@PropertySource 可以忽略。

这样就可以获取到 test.yml 中的配置了。

另外,关于上面的注解,可以参考


classpath*


classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。

注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*

一些使用技巧:

从上面使用的场景看,可以在路径上使用通配符*进行模糊查找。比如:

<param-value>classpath:applicationContext-*.xml</param-value>

**/表示的是任意目录;**/applicationContext-*.xml 表示任意目录下的以 applicationContext-开头的XML文件。

程序部署到tomcat后,src目录下的配置文件会和class文件一样,自动copy到应用的WEB-INF/classes目录下;classpath:与classpath*:的区别在于,前者只会从第一个classpath中加载,而 后者会从所有的classpath中加载。

如果要加载的资源,不在当前ClassLoader的路径里,那么用classpath:前缀是找不到的,这种情况下就需要使用classpath*:前缀。

在多个classpath中存在同名资源,都需要加载时,那么用classpath:只会加载第一个,这种情况下也需要用classpath*:前缀。


file


file 路径就是项目路径。

例子

在项目下的 config 创建一个 test 目录,加上 test.yml

那么启动参数是

spring.config.location=file:./config/test.yml

使用注解

@PropertySource(value = {"file:./config/test.yml"})

就可以获取到配置文件的信息了。

请我喝杯咖啡吧~