2017-01-10 11 views
0

Я строй SpringBoot приложения с использованием Spring-Data-Кассандру (1.5.RC1) и Кассандрой 3Несколько CassandraTemplates в Repository

Теперь это мой CassandraConfig класс:

@Configuration 
@PropertySource(value = { "classpath:META-INF/cassandra.properties" }) 
@EnableCassandraRepositories(basePackages = { "com.rg" }) 
public class CassandraConfig { 

@Autowired 
private Environment environment; 

private static final Logger LOGGER = LoggerFactory.getLogger(CassandraConfig.class); 

@Bean 
public CassandraClusterFactoryBean XCluster() { 

    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
    cluster.setContactPoints(environment.getProperty("cassandra.X.contactpoints")); 
    cluster.setPort(Integer.parseInt(environment.getProperty("cassandra.X.port"))); 
    return cluster; 
} 

@Bean 
public CassandraMappingContext XMappingContext() { 
    return new BasicCassandraMappingContext(); 
} 

@Bean 
public CassandraConverter XConverter() { 
    return new MappingCassandraConverter(XMappingContext()); 
} 

@Bean 
public CassandraSessionFactoryBean XSession() throws Exception { 

    CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
    session.setCluster(XCluster().getObject()); 
    session.setKeyspaceName(environment.getProperty("cassandra.X.keyspace")); 
    session.setConverter(XConverter()); 
    session.setSchemaAction(SchemaAction.NONE); 
    return session; 
} 

@Bean 
public CassandraOperations XCassandraTemplate() throws Exception { 
    return new CassandraTemplate(XSession().getObject()); 
} 

@Bean 
public CassandraClusterFactoryBean orgCluster() { 

    CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
    cluster.setContactPoints(environment.getProperty("cassandra.org.contactpoints")); 
    cluster.setPort(Integer.parseInt(environment.getProperty("cassandra.org.port"))); 
    return cluster; 
} 


@Bean 
public CassandraMappingContext orgMappingContext() { 
    return new BasicCassandraMappingContext(); 
} 

@Bean 
public CassandraConverter orgConverter() { 
    return new MappingCassandraConverter(activityMappingContext()); 
} 

@Bean 
public CassandraSessionFactoryBean orgSession() throws Exception { 

    CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
    session.setCluster(activityCluster().getObject()); 
    session.setKeyspaceName(environment.getProperty("cassandra.org.keyspace")); 
    session.setConverter(activityConverter()); 
    session.setSchemaAction(SchemaAction.NONE); 
    return session; 
} 

@Bean 
public CassandraOperations orgCassandraTemplate() throws Exception { 
    return new CassandraTemplate(orgSession().getObject()); 
} 

}

Это мой Repository:

public interface ActivityRepository extends CassandraRepository<Activity> { 

@Query("SELECT * FROM activities2 WHERE actor_id=?0") 
Iterable<Activity> findByActor_Id(String actor_Id); 

// @Query("SELECT * FROM activities2 WHERE viewer_id='?0'") 
// Iterable<Activity> findByApp_Id(String appId); 

}

Однако, приложение не загружается со следующей ошибкой:

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'XController': Unsatisfied dependency expressed through field 'XService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'XService' defined in file [/Users/jarvis/Documents/workspace/XStreamLog/bin/com/rg/Xstream/service/XService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XRepository': Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cassandraTemplate' available 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
    at com.rg.Xstream.Application.main(Application.java:16) 
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'XService' defined in file [/Users/jarvis/Documents/workspace/XStreamLog/bin/com/rg/Xstream/service/XService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XRepository': Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cassandraTemplate' available 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:189) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1154) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1056) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) 
    ... 18 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XRepository': Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cassandraTemplate' available 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1492) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1237) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) 
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 31 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cassandraTemplate' available 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:685) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1199) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) 
    ... 45 more 

Я не undersatnd как cassandraTemplate в предыдущей версии проекта Autowired в приложение без меня явно указав это в коде , Если я могу понять, что я могу избавиться от этой ошибки. Любые вести?

+0

Вы должны обеспечить, по крайней мере, один компонент с именем 'cassandraTemplate' при использовании' настройки @ EnableCassandraRepositories' по умолчанию, или указать '@EnableCassandraRepositories (cassandraTemplateRef = ...) ' – mp911de

+0

Вы не создали компонент CassandraTemplate и, следовательно, его сообщение об ошибке. @Bean public CassandraOperations cassandraTemplate() throws Exception { return new CassandraTemplate (session(). GetObject()); } – denzal

ответ

0

Вы можете использовать код, приведенный ниже в качестве примера:

@Configuration 
public class CassandraConfig { 

    @Bean 
    public CassandraClusterFactoryBean cluster() { 
     CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); 
     cluster.setContactPoints(cassandraContactPoints); 
     cluster.setPort(Integer.parseInt(cassandraPort)); 
     return cluster; 
    } 

    @Bean 
    public CassandraMappingContext mappingContext() { 
     return new BasicCassandraMappingContext(); 
    } 

    @Bean 
    public CassandraConverter converter() { 
     return new MappingCassandraConverter(mappingContext()); 
    } 

    @Bean 
    public CassandraSessionFactoryBean session() throws Exception { 
     CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); 
     session.setCluster(cluster().getObject()); 
     session.setKeyspaceName(cassandraKeyspace); 
     session.setConverter(converter()); 
     session.setSchemaAction(SchemaAction.NONE); 
     return session; 
    } 

    @Bean 
    public CassandraOperations cassandraTemplate() throws Exception { 
     return new CassandraTemplate(session().getObject()); 
    } 
}