java - 使用 Spring Boot 动态更改静态内容

标签 java spring spring-mvc spring-boot

现在我有一个简单的 Spring Boot 应用程序,它提供放置在 resources/static/img 中的静态图像。这对于显示实际内容来说效果很好,但有两件事我想解决:

  1. 我不希望将这些图像中的任何一个与生成的 .jar 文件捆绑在一起,而且我知道将这些图像放在 resources 文件夹中会那样做。

  2. 使用我当前的设置,为了在 webapp 上看到新图像,我必须将它添加到文件夹并重新启动它。相反,我希望 Spring 为特定文件夹中存在的任何静态内容提供服务,这样我就可以在应用程序运行时添加图像,并让它们在 localhost:8080/img/{image name} 自动提供.

我试图通过设置资源处理程序来解决这个问题,但我不确定这与简单地从 resources/static 提供服务是否有任何不同。不幸的是,我仍然在努力正确配置它,因为我根本看不到任何图像。这是我尝试过的:

@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/img/**").addResourceLocations("file:" + Application.IMAGE_DIR);
        super.addResourceHandlers(registry);
    }
}

这是我的应用程序配置:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    static String IMAGE_DIR;

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) throws IOException {
        SpringApplication.run(Application.class, args);
        IMAGE_DIR = new File(".").getCanonicalPath() + "/img/";
    }

}

同样,我的目标是在我的项目根目录中设置一个名为 img 的文件夹,它将存储我希望 webapp 在 localhost:8080/img 上提供的图像/{图像名称}。如果可能,我希望能够在应用程序运行时向该文件夹添加内容,并让 Spring 自动为它们提供服务,而无需重新启动它。

有人有什么想法吗?提前致谢。

最佳答案

您的方法的问题是您在运行 spring boot 应用程序后设置 IMAGE_DIR 并且常量 IMAGE_DIR 未初始化并且为 null .更改如下:

public static void main(String[] args) throws IOException {
        IMAGE_DIR = "/opt/img/";
        SpringApplication.run(Application.class, args);
    }

并删除所有与 File(".").getCanonicalPath() 相关的内容,它将起作用。当您在所选目录中有新图像可以提供时,您的方法将满足您的需求。

关于java - 使用 Spring Boot 动态更改静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288643/

相关文章:

java - 什么数组/集合对象对于 "contains"函数最有效?

java - 使用 gradle 和 java9+ 的自动模块的依赖关系问题

java - 错误 : org. springframework.jdbc.BadSqlGrammarException: StatementCallback;错误的 SQL 语法 Java Spring MVC

java - 使用 MethodInvokingFactoryBean for XMLConfiguration 在 Spring bean 中加载文件

java - 我如何挂接到 Spring 的 @RequestBody 参数解析以使用请求的主体解析我自己的参数

java - Spring MVC 3.1 根据请求语言环境更改语言 i18n

java - primefaces 默认 css 主题被自定义模板覆盖

java - PageRequest 构造函数已被弃用

java - 将 Spring 与 App Engine 结合使用

发生 Java 堆空间错误