1

使用時

@Configuration
@EnableCassandraRepositories(basePackages={"com.foo"})
public class CassandraConfig{
@Bean
    public CassandraClusterFactoryBean cluster()
    {

        final CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
        cluster.setContactPoints(nodesRead);
        cluster.setPort(port);

        return cluster;
    }

パッケージ内のどこにcom.fooを拡張するインターフェースがありますCrudRepository

データベースがダウンしている場合に起動時に例外がスローされないようにする方法はありますか?

理想的には、起動してリポジトリでメソッドを呼び出すと、最初にデータベースへの接続が試行され、データベースがまだダウンしている場合は、接続できないというエラーが返されます。

私が現在観察している動作は、NoHostAvailableExceptionスローされ、Web コンテナーが起動しないことです。

4

1 に答える 1

2

解決策を思いつくことができました。@EnableCassandraRepositories(basePackages={"com.foo"}) アノテーションをリポジトリから削除し、Config でリポジトリを返す Bean を定義しました。EnableCassandraRepositories を削除すると、リポジトリの遅延読み込みが可能になりました。Config のこの新しい Bean により、RepositoryFactorySupport getRepository() メソッドを使用してリポジトリをインスタンス化できました。この Bean に遅延アノテーションを付け、Bean への参照も遅延であることを確認しました。

私のリポジトリが次のようになっていると仮定します

public interface IBarRepository extends CrudRepository<Bar, BarKey>{}

私の設定ファイルは次のようになります

@Configuration

public class CassandraConfig{
@Bean
@Lazy(value=true)
public IBarRepository barRepository() throws Exception    
{
  final RepositoryFactorySupport support = CassandraRepositoryFactory(cassandraTemplate());
  return support.getRepository(IBarRepository.class); 
}
@Bean
@Lazy(value=true)
public CassandraClusterFactoryBean cluster()
{

    final CassandraClusterFactoryBean cluster = new   CassandraClusterFactoryBean();
    cluster.setContactPoints(nodesRead);
    cluster.setPort(port);

    return cluster;
}
//More beans down here defining things like cluster, mappingContext, session, etc.
于 2015-11-18T15:35:22.303 に答える