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