2016-07-22 15 views
0

Ich verwende eine automatisch konfigurierte DataSource im Spring Boot 1.3.6 und verwende den Health-Endpunkt von Actuator. Der Health-Endpunkt enthält jedoch keine Datenbankkomponente in der Ausgabe.Spring Boot Actuator DataSourceHealthIndicator funktioniert nicht für automatisch konfigurierte DataSource

Mein application.properties sich wie folgt:

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:local 
spring.datasource.username=vagrant 
spring.datasource.password=vagrant 
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver 

endpoints.enabled=false 
endpoints.health.enabled=true 

Die Ausgabe von dem/Gesundheit Endpunkt ist:

{"status":"UP","diskSpace":{"status":"UP","total":499863515136,"free":121851781120,"threshold":10485760}} 

I aktiviert Trace-Logging und es sieht aus wie Spring-Boot wird Autokonfiguration die Gesundheitsindikatoren vor der Datenquelle. Hier ist ein Auszug aus dem Trace-Protokoll (beachten Sie die Zeitstempel):

2016-07-22 10:07:20.976 TRACE 7628 --- [restartedMain] o.s.b.a.condition.OnClassCondition  : Condition OnClassCondition on org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration$DataSourcesHealthIndicatorConfiguration matched due to @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate 
2016-07-22 10:07:20.977 TRACE 7628 --- [restartedMain] .b.a.a.OnEnabledHealthIndicatorCondition : Condition OnEnabledHealthIndicatorCondition on org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration$DataSourcesHealthIndicatorConfiguration matched due to All default health indicators are enabled by default 
2016-07-22 10:07:23.304 TRACE 7628 --- [restartedMain] o.s.b.a.condition.OnClassCondition  : Condition OnClassCondition on org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration$DataSourcesHealthIndicatorConfiguration matched due to @ConditionalOnClass classes found: org.springframework.jdbc.core.JdbcTemplate 
2016-07-22 10:07:23.305 TRACE 7628 --- [restartedMain] o.s.b.a.condition.OnBeanCondition  : Condition OnBeanCondition on org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration$DataSourcesHealthIndicatorConfiguration did not match due to @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found no beans 

2016-07-22 10:07:23.577 TRACE 7628 --- [restartedMain] o.s.b.a.condition.OnBeanCondition  : Condition OnBeanCondition on org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration matched due to @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) found no beans 
2016-07-22 10:07:23.578 DEBUG 7628 --- [restartedMain] a.ConfigurationClassBeanDefinitionReader : Registered bean definition for imported class 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration' 
2016-07-22 10:07:23.578 DEBUG 7628 --- [restartedMain] a.ConfigurationClassBeanDefinitionReader : Registering bean definition for @Bean method org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource() 

Bin ich etwas falsch zu machen, oder ist das ein Fehler in Spring-Boot? Gibt es eine Möglichkeit, die Reihenfolge zu ändern, so dass die Datenquelle zuerst initialisiert wird?

Antwort

0

Mein Problem wurde durch das Ausführen der App von Eclipse verursacht. Ich hatte auch eine TestApplication Klasse in src/test/java, die einen Ausschluss für DataSourceAutoConfiguration hatte. Ich habe die Klasse TestApplication von der Komponentenüberprüfung ausgeschlossen (über excludeFilter unter @ComponentScan), und der Endpunkt der Gesundheit funktionierte wie erwartet (d. H. Er enthielt Datenbankinformationen).