簡體   English   中英

當輔助數據源數據庫連接不可用時,Spring啟動不會啟動

[英]Spring boot does not start when secondary datasource database connection unavailable

Caused by: java.lang.NullPointerException
    at org.springframework.boot.actuate.endpoint.DataSourcePublicMetrics.initialize(DataSourcePublicMetrics.java:64) ~[spring-boot-actuator-1.3.2.RELEASE.jar:1.3.2.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_79]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_79]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_79]
    at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_79]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:354) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE]

我也禁用了指標,但沒有運氣

endpoints.enabled=false
endpoints.autoconfig.enabled=false
endpoints.metrics.enabled=false

即使禁用了度量標准,也始終會創建DataSourcePublicMetrics bean。 當數據庫連接不可用時,這會導致NullPointerException ,導致spring boot無法啟動。

我正在使用Hikari數據源,當數據庫不可用時,它無法構造數據源對象。 因此來自DataSourcePublicMetrics bean的NPE。 我能夠避免創建一個使用數據庫配置初始化的Hikari數據源的問題,即使在數據庫可用時數據庫不可用以供以后使用時也是如此。 不知道為什么HikariDataSource沒有lazy init的構造函數。 它有一個默認構造函數,但不能使用任何setter方法設置數據庫配置。 這對於不一定需要數據庫來啟動它們的應用程序非常有用。

public class LazyConnectionDataSource extends HikariDataSource {
    public LazyConnectionDataSource(HikariConfig config) {
        config.validate();
        config.copyState(this);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM