2015-11-16 1 views
1

Lorsque vous utilisezComment charger contexte d'application de printemps, même si Cassandra vers le bas

@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; 
    } 

Où dans le package com.foo il y a une interface qui étend CrudRepository.

Existe-t-il un moyen de faire en sorte qu'au démarrage, une exception ne soit pas levée si la base de données est arrêtée? Idéalement, ce qui se produit est que nous démarrons et chaque fois que vous appelez une méthode sur le référentiel, il va d'abord tenter de se connecter à la base de données et si la base de données est encore en panne, retourner une erreur.

Le comportement que j'observe actuellement est que NoHostAvailableException est lancé et le conteneur Web ne démarre pas.

Répondre

1

J'ai été capable de trouver une solution. J'ai supprimé l'annotation @EnableCassandraRepositories (basePackages = {"com.foo"}) du référentiel et défini un Bean dans ma configuration qui retournerait mon référentiel. La suppression des EnableCassandraRepositories a permis un chargement paresseux du référentiel. Ce nouveau bean dans ma configuration m'a permis d'instancier mon dépôt en utilisant la méthode getRepository() de RepositoryFactorySupport. J'ai annoté ce haricot comme paresseux et je me suis assuré que les références au haricot étaient aussi paresseuses.

On suppose mon dépôt ressemble à la

suivante

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

Mon fichier de configuration ressemble maintenant à

@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.