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"}) 注释,并在我的配置中定义了一个将返回我的存储库的 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 回答