【问题标题】:Spring Boot: Is it possible to separate css, js and template files from .war?Spring Boot:是否可以将 css、js 和模板文件与 .war 分开?
【发布时间】:2019-09-03 07:10:48
【问题描述】:

我通过上传 Maven 创建的 .war 文件将一个新的 Spring Boot kotlin 应用程序部署到实时服务器,它现在可以正常工作。但是,似乎静态内容(css,js和模板文件)也压缩在这个.war文件中,这给我带来了一些问题,好像我想更改实时服务器上的css,我必须重新部署整个 .war 文件。

所以我想知道,是否可以将 css/js/template 文件与 .war 文件分开?这样,我将 .war 文件上传到服务器,并将 css/js/template 文件分别上传。如果我想更改 css 或 js 文件,我不必重新部署。谢谢,请让我知道这是怎么可能的。

【问题讨论】:

    标签: spring-boot kotlin deployment war


    【解决方案1】:

    您应该能够在 WAR 之外注册资源位置,以便 Spring Boot 为它们提供服务。

    例如,您可以通过这种方式在/files/<file_path_relative_to_optfiles_dir> URL 上提供/opt/files 目录中的所有文件:

    @Configuration
    @EnableWebMvc
    class MvcConfig : WebMvcConfigurer {
        override fun addResourceHandlers(registry: ResourceHandlerRegistry) {
            registry
                .addResourceHandler("/files/**")
                .addResourceLocations("file:/opt/files/");
        }
    }
    

    您可以在this Baeldung tutorial 中获得更多解释(它是在 Java 中,但您可以理解)。

    【讨论】:

    • 我明白了,谢谢你的回复。因此,如果我希望将文件夹“/resources/static”中的文件夹从 .war 中排除,我只需编写 registry.addResourceHandler("/static/**").addResourceLocations("file:/resources/static/") ?这样我就可以即时更改 .css、.js 和 .png 等静态文件,而无需重新部署 .war 即可查看更改?
    • 这样做并不是完全排除战争中的文件,而是包括您机器上位于/resources/static的文件夹中的文件。但是,是的,这样做应该使您能够在服务器运行时仅更新目录中的文件。但是您需要在部署战争的机器上创建该文件夹并将文件放在那里。
    • 感谢您的输入,我能够在本地计算机和远程服务器上加载外部文件。唯一的问题是,当我从开发模式切换到生产模式时,我必须更改资源位置,这有点不方便。我想知道,是否可以在 applications.properties 文件中指定它?这样我就可以将它分为application-dev.properties和application-prod.properties,并且可以轻松地在dev/production模式之间切换。
    • @LordYggdrasill 我不确定也没有对此进行测试,但是您应该能够同时注册战中资源位置基于文件的资源位置.也许您可以以比基于资源的位置更高的优先级注册基于文件的位置,因此在开发模式下使用战争中的资源,而在生产模式下使用基于文件的资源(具有额外的副作用,即您具有默认值如果服务器上没有提供文件,则用于资源)。这个需要测试,只是猜测
    【解决方案2】:

    您可以使用外部资源配置

    如果您不希望某个文件成为war包的一部分,只需进行简单的配置即可将其排除:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.css</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
    

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 2017-08-09
      • 2016-04-26
      • 2016-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多