Spring Boot连接Cassandra报错:无法解析cassandraTemplate Bean
问题:Spring Boot连接Cassandra启动报错无法找到cassandraTemplate bean
启动应用时出现如下错误:
Error creating bean with name 'abcItemsRepository' defined in com.myspace.mycompany.repository defined in @EnableCassandraRepositories declared on CassandraRepositoriesRegistrar.EnableCassandraRepositoriesConfiguration: Cannot resolve reference to bean 'cassandraTemplate' while setting bean property 'cassandraTemplate'
提供的配置与代码信息
实体类OboItems
@Table("abc_items") @Data @NoArgsConstructor @AllArgsConstructor public class OboItems { @Id @PrimaryKeyColumn(name = "item_id", ordinal = 0, type = PrimaryKeyType.PARTITIONED) @Column(name = "item_id") private String itemId; @Column(name = "last_scheduled_time") private Date lastScheduledTime; }
启动类MyApplication
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
Repository接口
public interface OboItemsRepository extends CassandraRepository<OboItems,String> { }
配置文件application.properties
spring.data.cassandra.contact-points=<my-end-point> spring.data.cassandra.port=9042 spring.data.cassandra.username=<username> spring.data.cassandra.password=<password> spring.data.cassandra.keyspace-name=<mykeyspace> spring.data.cassandra.session.timeout=30000
解决方案
确保依赖完整性
检查项目构建文件(pom.xml或build.gradle)中是否包含Spring Data Cassandra的starter依赖,版本需与Spring Boot版本兼容:<!-- Maven依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-cassandra</artifactId> </dependency>正确配置包扫描
若使用自定义Cassandra配置类,必须添加@Configuration和@EnableCassandraRepositories注解,并指定Repository所在包路径,同时手动配置必要的Cassandra参数及cassandraTemplate:@Configuration @EnableCassandraRepositories(basePackages = "com.myspace.mycompany.repository") public class CassandraConfig extends AbstractCassandraConfiguration { @Value("${spring.data.cassandra.contact-points}") private String contactPoints; @Value("${spring.data.cassandra.port}") private int port; @Value("${spring.data.cassandra.username}") private String username; @Value("${spring.data.cassandra.password}") private String password; @Value("${spring.data.cassandra.keyspace-name}") private String keyspaceName; @Override protected String getContactPoints() { return contactPoints; } @Override protected int getPort() { return port; } @Override protected String getKeyspaceName() { return keyspaceName; } @Override protected AuthProvider getAuthProvider() { return new PlainTextAuthProvider(username, password); } @Bean public CassandraTemplate cassandraTemplate(Session session) { return new CassandraTemplate(session); } }若不使用自定义配置,需保证启动类所在包包含Repository的子包,或在
@SpringBootApplication中显式指定扫描包:@SpringBootApplication(scanBasePackages = "com.myspace.mycompany") public class MyApplication { // ... }验证配置文件有效性
替换配置文件中的占位符(<my-end-point>、<username>等)为实际的Cassandra服务信息,确保服务正常运行,端口9042可访问,用户名密码、keyspace名称均正确。检查实体类注解
确认实体类OboItems的@Table注解指定的表名abc_items与Cassandra中实际表名一致;@Id、@PrimaryKeyColumn的主键配置类型与数据库表结构匹配。
内容的提问来源于stack exchange,提问作者Omprakash
相关产品推荐
相关产品推荐

