java - 无法执行spring boot jar

标签 java angularjs spring maven jar

我有一个 Spring Boot 后端 + 单独的(基于 AngularJS 的)客户端应用程序。我的构建过程首先缩小客户端应用程序的代码并对其进行压缩,然后将其作为库安装在本地 Maven 存储库中。服务器在其 pom 中引用客户端库,因此当构建服务器时,客户端将被打包到 jar 中。

问题是,当运行 jar(使用 java -jar)时,有时需要很长的时间才能启动(即 5-10 分钟)或根本无法启动(在合理的时间内) ),有时会立即开始(5-10 秒)。我想知道可能是什么原因?这是否与客户端 zip 太大有关(有时可能会以某种方式被缓存)?

编辑:运行 jar 时(通过 java -jar server.jar)。之后日志就像

Starting Application ... with PID ...
Mapping servlet: 'dispatcherServlet' to [/]
Mapping filter: ....
Mapping filter: 'requestContextFilter' to [/*]

并卡在这个过滤器映射上。

最佳答案

您必须检查 spring-boot 日志文件以了解应用程序在哪里花费了时间。尝试在 TRACE 上设置日志级别并观察时间戳。

在 spring-boot 中你可以添加 ResourceHandlers提供静态内容。 您必须执行类似的覆盖,如链接中所述:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    if (!registry.hasMappingForPattern("/webjars/**")) {
        registry.addResourceHandler("/webjars/**").addResourceLocations(
                "classpath:/META-INF/resources/webjars/");
    }
    if (!registry.hasMappingForPattern("/**")) {
        registry.addResourceHandler("/**").addResourceLocations(
                RESOURCE_LOCATIONS);
    }
}

通过这种方式,您可以将客户端代码作为单独的包进行分发,并且在部署过程中,您必须将该包(可能还需要将其解压)放在正确的位置,以便资源处理程序可以拾取它。

关于java - 无法执行spring boot jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161301/

相关文章:

angularjs - 重新排序数组时如何使用angular-animate触发ng-move?

html - 如何设置使用 angularjs 创建的复选框的样式?

angularjs - 为什么这个 Controller 函数被调用不止一次

spring - 管道破裂Java EE

java - 为什么我的变量 richtigeHoeren 只能计数到 10?

java - 如何在没有循环的情况下查找列表中对象的所有索引?

java - 使用 JFrame 的图像幻灯片

java - JAXB + 枚举 + 显示多个值

java - 为什么@Required被Spring忽略?

java - Spring 的属性子集