这里讲一下 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"})就可以获取到配置文件的信息了。