在Spring Boot中,静态资源(如图片、CSS文件和JS文件)是存储在Web应用程序的classpath中的。在部署Web应用程序时,这些静态资源和其他资源文件一起打包在war或jar文件中。
静态资源的优先级顺序,可以通过以下方式进行修改:
- 放置在静态资源根目录下的资源优先加载;
- 优先加载jar包中的资源;
- 不同jar包中资源的加载是按照jar包中META-INF文件夹下的文件名进行排序。
在Spring Boot中,默认静态资源的根目录是:classpath:/static/,我们可以在该目录下存放静态文件,当Web应用程序需要加载静态资源时,会先从该目录下寻找。
以下是两条示例说明:
- 假设有两个jar包(A.jar和B.jar),它们都包含名为“test.css”的CSS文件,但是在A.jar中的test.css文件是更重要的,需要先加载。为了实现这个目标,我们可以做如下的修改:
在A.jar和B.jar中的META-INF文件夹下,新建一个名为“additional-spring-configuration-metadata.json”的文件,在该文件中指定test.css文件的优先级。示例如下:
A.jar中的additional-spring-configuration-metadata.json文件内容:
{
"properties": [
{
"name": "spring.resources.static-locations",
"sourceType": "java.lang.String",
"defaultValue": "",
"description": "Locations of static resources.",
"sourceMethod": "org.springframework.boot.autoconfigure.web.ResourceProperties#setStaticLocations(java.util.List<org.springframework.core.io.Resource>)"
}
],
"hints": [
{
"name": "spring.resources.static-locations[A.jar]",
"values": [
"classpath:/static/",
"classpath:/A.jar!/static/",
"classpath:/B.jar!/static/"
]
}
]
}
B.jar中的additional-spring-configuration-metadata.json文件内容:
{
"properties": [
{
"name": "spring.resources.static-locations",
"sourceType": "java.lang.String",
"defaultValue": "",
"description": "Locations of static resources.",
"sourceMethod": "org.springframework.boot.autoconfigure.web.ResourceProperties#setStaticLocations(java.util.List<org.springframework.core.io.Resource>)"
}
],
"hints": [
{
"name": "spring.resources.static-locations[B.jar]",
"values": [
"classpath:/static/",
"classpath:/B.jar!/static/",
"classpath:/A.jar!/static/"
]
}
]
}
通过以上的设置,当Web应用程序需要加载test.css文件时,会先从A.jar中的/static目录下寻找,如果找不到才到B.jar中的/static目录下寻找。
- 在Spring Boot中,可以通过修改“spring.resources.static-locations”属性来指定静态资源的根目录。例如,如果我们希望将静态资源存储在“classpath:/public/”目录下,可以在application.properties中添加以下配置:
spring.resources.static-locations=classpath:/public/
这样,在加载静态资源时,Web应用程序会先从classpath:/public/目录下寻找。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot中的静态资源加载顺序优先级 - Python技术站