2017-01-23 40 views
0

我已經爲數據庫測試創建了用於彈簧啓動執行器的示例項目。運行應用程序時我打的網址使用彈簧啓動執行器關閉mongo時的應用狀態關閉

  • 當蒙戈DB運行
  • 網址:http://localhost:8080/health
  • 響應: `{ 「地位」: 「UP」, 「磁盤空間」:{ 「地位」 :「UP」,「total」:493767094272,「free」:404928278528,「threshold」:10485760},「mongo」:{「status」:「UP」,「version」:「3.0.2」}}

`

  • 當蒙戈DB沒有運行
  • 網址: http://localhost:8080/health
  • 響應:

    { 「地位」: 「DOWN」, 「磁盤空間」:{ 「地位」: 「UP」, 「總」: 493767094272,「free」:404929720320,「threshold」:10485760},「mongo」:{「status」:「DOWN」,「error」:「org.springframework.dao.DataAccessResourceFailureException:等待30000ms後超時匹配ReadPreferenceServerSelector {readPreference = primary}的服務器。集羣狀態的客戶端視圖是由{java.net。引起的{type = UNKNOWN,servers = [{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:打開套接字的異常}。 ConnectException:Connection refused:connect}}];嵌套的異常是com.mongodb.MongoTimeoutException:在等待與ReadPreferenceServerSelector {readPreference = primary}匹配的服務器的30000 ms後超時。集羣狀態的客戶端視圖是由{java.net。引起的{type = UNKNOWN,servers = [{address = localhost:27017,type = UNKNOWN,state = CONNECTING,exception = {com.mongodb.MongoSocketOpenException:打開套接字的異常}。的ConnectException:連接被拒絕:連接}}] 「}}

問:爲什麼申請狀態爲 」DOWN「。當我的MongoDB是沒有運行我希望我的申請狀態爲 」UP「 天氣MongoDB是」 DOWN 「或 」UP「。

下面是我的主類春季啓動應用程序。

package com.company.testing; 

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

@SpringBootApplication 
public class Application { 

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

的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> 
    <artifactId>SpringBootSample</artifactId> 
    <version>0.0.1</version> 
    <name>Spring Boot Sample</name> 
    <description>Spring Boot Sample for spring boot actuator</description> 
    <groupId>com.company.testing</groupId> 

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

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> 


    </dependencies> 

    <properties> 
     <java.version>1.8</java.version> 
    </properties> 

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

只是爲了確保我明白了,你正在使用蒙戈,你想健康端點,如果它漲不跌不在乎?什麼是用例? –

+0

使用案例:我希望健康端點照顧mongo並更新狀態天氣mongo爲「UP」或「DOWN」,但當mongo處於關閉狀態時,應用狀態應爲「UP」,因爲mongo已關閉,但我的應用程序是「 UP「 – Harshil

+0

@StephaneNic​​oll:當mongo關閉時,我期待這個結果: {」status「:」UP「,」diskSpace「:{」status「:」UP「,」total「:493767094272,」free「 :404929720320,「threshold」:10485760},「mongo」:{「status」:「DOWN」,「error」:「」}} – Harshil

回答

1

申請。性能

management.health.mongo.enabled=false 
endpoints.mongo.enabled=true 

MongoDBHealthCheckEndPoint.java

@ConfigurationProperties(prefix = "endpoints.mongo", ignoreUnknownFields =  true) 
@Component 
public class MongoDBHealthCheckEndPoint extends AbstractEndpoint<Map<String, String>> 
{ 

@Inject 
MongoTemplate mongoTemplate; 


private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); 

private static final Map<String, String> UP = new HashMap<String, String>() {{ 
    put("mongo.status", "UP"); 
}}; 

private static final Map<String, String> DOWN = new HashMap<String, String>() {{ 
    put("mongo.status", "DOWN"); 
}}; 


public MongoDBHealthCheckEndPoint() { 
    super("mongo", false); 
} 

public MongoDBHealthCheckEndPoint(Map<String, ? extends Object> mongo) { 
    super("mongo", false); 
} 

public Map<String, String> invoke() { 
    try { 
     return (new MongoHealthIndicator(mongoTemplate).health().getStatus().equals(Status.UP)) ? UP : DOWN; 
    } catch (Exception e) { 
     log.error("mongo database is down", e); 
     return DOWN; 
    } 
} 
+0

不錯..謝謝男人。 – Harshil

1

春季啓動器使用HealthIndicatorAutoconfiguration配置各種健康相關的豆類。其中一個bean被稱爲healthAggregator,它使用實現或OrderedHealthAggregator。它將使用的所有健康指標最低的狀態,以提供整體應用現狀(這就是爲什麼你要下來的整體應用。

您可以關閉MongoDB的監控(management.health.mongo.enabled=false)或寫自己實現AbstractHealthAggregator那將忽略MongoDb正在關閉,例如,並提供它在您的配置:

@Bean 
    public MyHealthAggregator healthAggregator() { 
     return new MyHealthAggregator(); 
    } 
+0

oh gotcha .. thnx man。 – Harshil