在 spring 引导中添加外部静态文件(css、js、png ...)
Adding external static files (css, js, png ...) in spring boot
背景
我有一个 spring boot 应用程序,其中 logo.png
文件添加到资源文件的 static
文件夹中,它是最终构建到执行中使用的 jar 文件中。
此 jar 应用程序需要在不同客户端的多个实例中 运行。所以我所做的是创建一个外部 application.properties
文件来区分每个用户的设置。
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
问题
但问题是,我需要更改每个应用程序实例的徽标。我无法将客户徽标嵌入到我的应用程序 jar 中。相反,我需要像 application.properties.
一样将其保存在外部
目前,我所做的是在执行 jar
的同一文件夹中检查文件 logo.png
,如果存在,则读取文件,获取 base64 数据并显示它在 img
标签中。
但我希望以适当的方式将其作为静态内容来完成。我需要将静态内容外部化。 所以我可以让每个客户都有一个特定的jar实例运行不同的静态资源内容
例如。我需要保留如下外部静态文件,并从我认为 href
或 src
标签的 html 属性的 url 进行访问。
总结
所需的文件夹结构
+ runtime
- myapp-0.1.0.jar
- application.properties
+ static
- logo.png
应该可以访问
<img th:src="@{/logo.png}" />
您可以使用资源处理程序来提供外部文件 - 例如
@Component
class WebConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/ext/**").addResourceLocations("file:///yourPath/static/");
}
}
WebMvcConfigurerAdapter 已弃用。从 Spring Boot 2.x 开始,您可以改用 WebMvcConfigurer。
@Configuration
public class MediaPathConfig {
// I assign filePath and pathPatterns using @Value annotation
private String filePath = "/ext/**";
private String pathPatterns = "/your/static/path/";
@Bean
public WebMvcConfigurer webMvcConfigurerAdapter() {
return new WebMvcConfigurer() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern(pathPatterns)) {
registry.addResourceHandler(pathPatterns)
.addResourceLocations("file:" + filePath);
}
}
};
}
}
背景
我有一个 spring boot 应用程序,其中 logo.png
文件添加到资源文件的 static
文件夹中,它是最终构建到执行中使用的 jar 文件中。
此 jar 应用程序需要在不同客户端的多个实例中 运行。所以我所做的是创建一个外部 application.properties
文件来区分每个用户的设置。
http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
问题
但问题是,我需要更改每个应用程序实例的徽标。我无法将客户徽标嵌入到我的应用程序 jar 中。相反,我需要像 application.properties.
一样将其保存在外部目前,我所做的是在执行 jar
的同一文件夹中检查文件 logo.png
,如果存在,则读取文件,获取 base64 数据并显示它在 img
标签中。
但我希望以适当的方式将其作为静态内容来完成。我需要将静态内容外部化。 所以我可以让每个客户都有一个特定的jar实例运行不同的静态资源内容
例如。我需要保留如下外部静态文件,并从我认为 href
或 src
标签的 html 属性的 url 进行访问。
总结
所需的文件夹结构
+ runtime
- myapp-0.1.0.jar
- application.properties
+ static
- logo.png
应该可以访问
<img th:src="@{/logo.png}" />
您可以使用资源处理程序来提供外部文件 - 例如
@Component
class WebConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/ext/**").addResourceLocations("file:///yourPath/static/");
}
}
WebMvcConfigurerAdapter 已弃用。从 Spring Boot 2.x 开始,您可以改用 WebMvcConfigurer。
@Configuration
public class MediaPathConfig {
// I assign filePath and pathPatterns using @Value annotation
private String filePath = "/ext/**";
private String pathPatterns = "/your/static/path/";
@Bean
public WebMvcConfigurer webMvcConfigurerAdapter() {
return new WebMvcConfigurer() {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern(pathPatterns)) {
registry.addResourceHandler(pathPatterns)
.addResourceLocations("file:" + filePath);
}
}
};
}
}