gpt4 book ai didi

java - 当辅助数据源数据库连接不可用时,Spring Boot 无法启动

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:15 24 4
gpt4 key购买 nike

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 没有用于延迟初始化的构造函数。它确实有一个默认构造函数,但无法使用任何 setter 方法设置数据库配置。这对于并不总是需要数据库来启动的应用程序非常有用。

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

关于java - 当辅助数据源数据库连接不可用时,Spring Boot 无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com