Spring启动restful web服务staan​​dalone app启动时间非常慢

时间:2016-03-10 09:47:27

标签: spring-boot

当使用spring boot作为独立应用程序运行我的restful web服务时,如果我将它作为JAR运行,JVM会在启动期间挂起大约4-5分钟(没有输出到控制台,没有Spring Boot Symbol很长时间最初的时间)。整个应用程序大约需要26分钟才能加载。如果我从Eclipse运行应用程序或将其打包为war并进行部署,整个启动时间不到20秒......我无法弄清问题是什么。按照https://spring.io/guides/gs/rest-service/

中的说明操作

如果按照上面的链接创建完全相同的Spring演示应用程序(问候语等),JVM大约需要一分钟才能显示Spring Boot符号。之后,应用程序开始以超慢速率加载。我从这个简单的应用程序得到的最后一行是:  2016-03-10 14:39:58.336 INFO 10344 --- [main] com.deepak.springbootrest.Application : Started Application in 204.826 seconds (JVM running for 254.923)

从Eclipse运行时,启动时间很好。在eclipse中,我看到:2016-03-10 14:56:56.019 INFO 24368 --- [ main] com.deepak.springbootrest.Application : Started Application in 3.452 seconds (JVM running for 4.426)

我正在使用JDK 1.7,我认为应该没问题。

编辑:应用程序启动时抓取:C:\dev\sw\jdk\jdk1.7.0_45\bin\java.exe -Dfile.encoding=UTF-8 -jar target\spring-boot-rest-0.0.1-SNAPSHOT.jar

如果我在命令行中使用了eclipse:

C:\dev\sw\jdk\jdk1.7.0_45\bin\java.exe -Dfile.encoding=UTF-8 -classpath C:\dev\bak\files\personal\train\code\tools\spring-boot-rest\target\classes;C:\Users\abrahd2.m2\repository\org\springframework\boot\spring-boot-starter-web\1.3.3.RELEASE\spring-boot-starter-web-1.3.3.RELEASE.jar;........OMITTED.....C:\Users\abrahd2.m2\repository\org\springframework\spring-expression\4.2.5.RELEASE\spring-expression-4.2.5.RELEASE.jar com.deepak.springbootrest.Application

它在4秒内启动

slow-mo启动日志的输出是:

  *.   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.3.RELEASE)
2016-03-10 15:23:19.061  INFO 25576 --- [           main] com.deepak.springbootrest.Application    : Starting Application v0.0.1-SNAPSHOT on INENABRAHD2L2C with PID 25576 (C:\dev\bak\files\personal\train\code\tools\spring-boot-rest\target\spring-boot-rest-0.0.1-SNAPSHOT.jar started by abrahd2 in C:\dev\bak\files\personal\train\code\tools\spring-boot-rest)
2016-03-10 15:23:19.625  INFO 25576 --- [           main] com.deepak.springbootrest.Application    : No active profile set, falling back to default profiles: default
2016-03-10 15:23:25.529  INFO 25576 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@f1a0fad: startup date [Thu Mar 10 15:23:25 IST 2016]; root of context hierarchy
2016-03-10 15:24:14.317  INFO 25576 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-03-10 15:25:15.962  INFO 25576 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-03-10 15:25:17.014  INFO 25576 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-03-10 15:25:17.198  INFO 25576 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.32
2016-03-10 15:25:25.059  INFO 25576 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-03-10 15:25:25.060  INFO 25576 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 119533 ms
2016-03-10 15:25:33.350  INFO 25576 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-03-10 15:25:33.721  INFO 25576 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-03-10 15:25:33.721  INFO 25576 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-03-10 15:25:33.721  INFO 25576 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-03-10 15:25:33.721  INFO 25576 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [/*]
2016-03-10 15:25:49.180  INFO 25576 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@f1a0fad: startup date [Thu Mar 10 15:23:25 IST 2016]; root of context hierarchy
2016-03-10 15:25:59.257  INFO 25576 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/greeting]}" onto public com.deepak.springbootrest.Greeting com.deepak.springbootrest.GreetingController.greeting(java.lang.String)
2016-03-10 15:25:59.352  INFO 25576 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-03-10 15:25:59.352  INFO 25576 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-03-10 15:25:59.864  INFO 25576 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-10 15:25:59.864  INFO 25576 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-10 15:26:01.305  INFO 25576 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-10 15:26:05.504  INFO 25576 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-03-10 15:26:10.089  INFO 25576 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-03-10 15:26:10.552  INFO 25576 --- [           main] com.deepak.springbootrest.Application    : Started Application in 208.006 seconds (JVM running for 258.259)*

添加代码和pom,这是Spring指南中的内容:

package com.deepak.springbootrest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Run with mvn spring-boot:run or java -jar target/<name of jar> Run with
 * http://localhost:8080/greeting
 * 
 * @author abrahd2
 *
 */
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

package com.deepak.springbootrest;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}



package com.deepak.springbootrest;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
    </parent>

    <groupId>com.deepak.test</groupId>
    <artifactId>spring-boot-rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Spring boot rest api</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.7</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

0 个答案:

没有答案