[英]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.