无法执行spring boot jar

时间:2016-08-26 08:02:59

标签: 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 [/*]

并陷入此过滤器映射。

1 个答案:

答案 0 :(得分:1)

您必须检查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);
    }
}

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