2016-12-29 28 views
0

當我啓動我的Spring應用程序時,可以在控制檯中看到啓動時間(我正在使用IntelliJ IDEA)。如何在代碼中獲得Spring applciation啓動時間

例如,下面的日誌顯示應用程序啓動時間爲13.427s。

2016-12-29 13:58:05.491  : Starting Application on 8DSXD72 with PID 14120 
2016-12-29 13:58:05.518  : Running with Spring Boot v1.4.1.RELEASE, Spring v4.3.3.RELEASE 
2016-12-29 13:58:05.519  : The following profiles are active: LOCAL 
2016-12-29 13:58:15.537  : JMX is disabled 
.... 
2016-12-29 13:58:17.392  : Started Application in 13.427 seconds (JVM running for 14.71) 

有沒有辦法在代碼中獲得啓動時間?我想在春季/info端點打印應用程序啓動時間。

+1

該特定計時器不可用,你可以通過註冊一個'SpringApplicationRunListener'來啓動一個計時器,並在「finished」處停止,然後以某種方式將它公開給你的端點處理器。 –

+0

@SotiriosDelimanolis謝謝。你的解決方案更好。請發佈答案,以便我可以接受它。 – NMSL

回答

1

這個答案是基於索蒂里奧斯的評論得到了應用程序的啓動時間。

首先,創建一個實現SpringApplicationRunListener的自定義類。

package com.example; 

public class AppListener implements SpringApplicationRunListener { 
    public static long appStartTime; 
    public static long appFinishTime; 

    //Constructor is required. 
    public AppListener(SpringApplication application, String[] args) { 
    } 

    @Override 
    public void started() { 
     appStartTime = System.currentTimeMillis(); 
    } 

    @Override 
    public void environmentPrepared(ConfigurableEnvironment environment) { 

    } 

    @Override 
    public void contextPrepared(ConfigurableApplicationContext context) { 

    } 

    @Override 
    public void contextLoaded(ConfigurableApplicationContext context) { 

    } 

    @Override 
    public void finished(ConfigurableApplicationContext context, Throwable exception) { 
     appFinishTime = System.currentTimeMillis(); 
    } 
} 

然後,將此行添加到spring.factories文件中。

org.springframework.boot.SpringApplicationRunListener=com.example.AppListener 
0
@ComponentScan 
@EnableAutoConfiguration 
@ConfigurationProperties 
public class Application implements CommandLineRunner { 

public static void main(String[] args) { 
    StopWatch stopWatch = new StopWatch("App"); 
    stopWatch.start("App Startup"); 
    SpringApplication.run(Application.class); 
    stopWatch.stop(); 
    System.out.println("Seconds = "+stopWatch.getTotalTimeSeconds()); 
    System.out.println(stopWatch.prettyPrint()); 
} 
.... 

您可以使用Spring實用秒錶(org.springframework.util.StopWatch)

相關問題