2016-04-22 8 views
1

私はCassandraにSpringデータを使用するSpringブートアプリケーションを持っています。要件の1つは、Cassandraクラスターが使用できなくてもアプリケーションが開始されることです。アプリケーションは状況を記録し、そのエンドポイントはすべて正常に動作しませんが、アプリケーションはシャットダウンしません。この間、クラスタに接続するのを再試行する必要があります。クラスタが使用可能になると、アプリケーションは正常に動作するはずです。 アプリケーションの起動中に接続でき、そのあとでクラスタが使用できなくなると、cassandra javaドライバは再試行を管理できます。 アプリケーションの起動中に再試行を管理し、SpringデータからCassandraリポジトリを使用するにはどうすればよいですか?Cassandra Cluster Recovery

ありがとう

答えて

0

要件の一つは、アプリケーションがカサンドラクラスタが

利用できない場合でも開始されるということです私はあなたがJavaドライバドキュメントからこのセッションを読むべきだと思う: http://datastax.github.io/java-driver/manual/#cluster-initialization

一部の呼び出しが実行されない限り、Clusterオブジェクトは自動的に接続されません。

Spring Data Cassandraを使用しているので(これは、Javaドライバのプレーン・マッパー・モジュールよりも機能が少ないため推奨しません...)オブジェクトまたはSessionオブジェクトが公開されているかどうかわかりませんユーザーに直接...

再試行の場合は、cluster.init()コールをtry/catchブロックに置くことができます。また、クラスタがまだ有効でない場合は、ドキュメントに従ってNoHostAvailableExceptionをキャッチします。例外時に、あなたはcluster.init()の再試行をスケジュールすることができ、後で

0

アパッチカサンドラは利用できませんが、あなたが@Lazyを使用して独自のSessionCassandraTemplate豆を定義する必要がある場合には、春のブートアプリケーションを起動することが可能です。豆はCassandraAutoConfigurationの箱から提供されますが、熱心に初期化され(デフォルト動作)、Sessionが作成されます。 Sessionにはカザンドラへの接続が必要です。カザンドラは、遅延して初期化されていない場合に起動を妨げます。

次のコードでは、遅延したリソースを初期化します:

@Configuration 
public class MyCassandraConfiguration { 

    @Bean 
    @Lazy 
    public CassandraTemplate cassandraTemplate(@Lazy Session session, CassandraConverter converter) throws Exception { 
     return new CassandraTemplate(session, converter); 
    } 

    @Bean 
    @Lazy 
    public Session session(CassandraConverter converter, Cluster cluster, 
      CassandraProperties cassandraProperties) throws Exception { 
     CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
     session.setCluster(cluster); 
     session.setConverter(converter); 
     session.setKeyspaceName(cassandraProperties.getKeyspaceName()); 
     session.setSchemaAction(SchemaAction.NONE); 
     return session.getObject(); 
    } 
} 
関連する問題