即使 Cassandra 關閉,Spring Boot 應用程序也應該啟動

達瓦爾

我想確保即使 Cassandra 關閉,我的應用程序也能啟動。處理這種情況的最佳方法是什麼?

我正在使用AbstractReactiveCassandraConfiguration和多個鍵空間實現。

    @Bean
    @NonNull
    @Override
    public CqlSessionFactoryBean cassandraSession() {
        final CqlSessionFactoryBean cqlSessionFactoryBean = new CqlSessionFactoryBean();
        cqlSessionFactoryBean.setContactPoints(contactPoints);
        cqlSessionFactoryBean.setLocalDatacenter(localDataCenter);
        cqlSessionFactoryBean.setUsername(username);
        cqlSessionFactoryBean.setPassword(password);
        return cqlSessionFactoryBean;
    }

密鑰空間在單獨的密鑰空間配置文件中設置。

鍵空間 1 和鍵空間 2 具有類似的配置。

@Configuration
@EnableReactiveCassandraRepositories(basePackages = "com.abc.repository.cassandra.xyz", reactiveCassandraTemplateRef = "keyspaceXYZTemplate")
public class XYZCassandraConfiguration extends CassandraConfig {

    @Override
    protected String getKeyspaceName() {
        return "KEYSPACE_NAME";
    }

    @Bean("keyspaceXYZTemplate")
    public ReactiveCassandraTemplate reactiveCassandraTemplate(@Qualifier("xyzBean") CqlSessionFactoryBean cqlSessionFactoryBean) {
        final ReactiveSession reactiveSession = new DefaultBridgedReactiveSession(cqlSessionFactoryBean.getObject());
        return new ReactiveCassandraTemplate(reactiveSession, cassandraConverter());
    }

    @NonNull
    @Override
    @Primary
    @Bean(name = "xyzBean")
    public CqlSessionFactoryBean cassandraSession() {
        final CqlSessionFactoryBean cqlSessionFactoryBean = super.cassandraSession();
        cqlSessionFactoryBean.setKeyspaceName(getKeyspaceName());
        return cqlSessionFactoryBean;
    }
}

堆棧跟踪:當應用程序啟動並且 Cassandra 關閉時。

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean
Invocation of init method failed; nested exception is com.datastax.oss.driver.api.core.AllNodesFailedException: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors() for more): Node(endPoint=localhost:9042, hostId=null, hashCode=70c95ec9): [com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|control|connecting...] Protocol initialization request, step 1 (OPTIONS): failed to send request (io.netty.channel.StacklessClosedChannelException)]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.8.jar:5.3.8]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.8.jar:5.3.8]
埃里克·拉米雷斯

這是不可能的,因為您的應用程序依賴於在啟動之前連接到數據庫。

除非驅動程序連接到 Cassandra,否則無法實例化 bean。乾杯!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何配置最新的 Spring Boot 應用程序以在啟動時運行單元測試

Flutter Slider – 即使用戶關閉應用程序並使用 Getx 重新訪問也保持打開/關閉

Spring Boot 應用程序中的 index.html 文件

使用 java11 在谷歌云上使用 mysql 部署 Spring 啟動應用程序

无法使用spring-boot-starter-data-cassandra从Spring Boot应用程序连接到Cassandra

在我的 Spring Boot 應用程序中存儲日誌的最佳應用程序是什麼?

Spring Data Cassandra无法启动的Spring Boot应用程序

@NotNull 約束不適用於應用程序屬性值 spring boot

如何啟動在 FastAPI 中提供響應後不關閉的後台進程

Android:如果用戶使用“最近使用的應用程序”按鈕關閉應用程序,則控制動作發生

通過 Spring Boot Run 但不通過 IntelliJ Idea 運行的應用程序

Spring Boot 應用程序給出錯誤循環引用為什麼?

無法從 Spring Boot 應用程序中設置的 DBRef 中刪除

如何通過 Spring Boot Web 應用程序創建到 Kafka 的持久連接

Spring Boot 應用程序將空值插入到我的 mysql 表中

在 Docker-compose 中使用 Kafka 運行 Spring Boot 應用程序

使用 Cassandra Prepared Statement 使用 Cassandra Operations Spring Boot

Spring Boot数据嵌入式Cassandra

如何將現有的 SOAP 網絡服務調用到 REST API Spring 啟動應用程序中

为什么我的 Spring Boot 应用程序即使在配置后也不会启动执行器

Spring Boot和Hibernate:即使没有与数据库的连接,也要启动应用程序

在 Flutter 中關閉應用程序時如何從 Firebase 註銷用戶

OpenGL Light 隨移動物體移動,即使它不應該

Spring Boot 在 Procfile 中的 jar 路徑究竟應該是什麼?

有沒有辦法創建一個 Spring Boot 客戶端應用程序來從另一個 Spring Boot 應用程序讀取數據?

Junit 5 mockito無法在spring boot應用程序中讀取用@Value註釋的屬性文件

LibVLCSharp:播放器關閉時如何停止應用程序

Xamarin 表單 WebView cookie 在應用程序關閉時清除

如何在 macOS SwiftUI 生命週期中關閉/退出我的應用程序?