在spring boot中添加外部静态文件(css,js,png ...)

时间:2015-06-21 16:34:41

标签: java spring spring-mvc spring-boot thymeleaf

背景

我有一个 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中。相反,我需要像app.properties一样保持外部。

目前,我所做的是检查logo.png执行文件夹中的文件jar,如果是excist,请读取文件,获取base64数据并在img代码。

但我希望以正确的方式将其作为静态内容完成。我需要将静态内容外部化。 所以我可以让每个客户都使用不同的静态资源内容运行jar的特定实例

例如。我需要保留外部静态文件,如下所示,并在html标记的hrefsrc属性视图中访问网址。

摘要

必需的文件夹结构

+ runtime
  - myapp-0.1.0.jar
  - application.properties
  + static
    - logo.png

应该可以访问

<img th:src="@{/logo.png}" />

2 个答案:

答案 0 :(得分:4)

您可以使用资源处理程序来提供外部文件 - 例如

@Component
class WebConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler("/ext/**").addResourceLocations("file:///yourPath/static/");
    }

}

答案 1 :(得分:0)

已弃用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);
                }
            }
        };
    }
}