使用时
@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容器无法启动。
答案 0 :(得分:2)
我能够想出一个解决方案。我从存储库中删除了@EnableCassandraRepositories(basePackages = {“com.foo”})注释,并在我的Config中定义了一个将返回我的存储库的Bean。删除EnableCassandraRepositories允许延迟加载存储库。我的Config中的这个新bean允许我使用RepositoryFactorySupport getRepository()方法实例化我的存储库。我将这个bean注释为lazy,并确保对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.