是否需要为Spring Boot中的CqlSession Bean添加@ApplicationScoped注解?
CqlSession添加@ApplicationScoped注解是否合理?
我注意到Spring Boot自动配置中,CqlSession是作为默认单例(每个上下文一个Bean)暴露的,对应的自动配置代码如下:
@Bean @ConditionalOnMissingBean @Lazy public CqlSession cassandraSession(CqlSessionBuilder cqlSessionBuilder) { return cqlSessionBuilder.build(); }
Cassandra官方文档明确指出:
CqlSession ... 它是线程安全的,你应该为每个目标Cassandra集群创建一个单独实例,并在整个应用中共享它。
结论:完全没必要添加@ApplicationScoped注解
- Spring中未指定作用域的Bean默认就是单例作用域(Singleton Scope),这和Jakarta EE的@ApplicationScoped语义完全一致——整个应用上下文内仅存在一个实例,完美契合Cassandra文档要求的"单实例共享"原则。
- 上述Spring Boot自动配置代码中的CqlSession Bean未指定额外作用域,默认就是单例,已经完全满足Cassandra的使用规范,添加@ApplicationScoped属于冗余操作,不会带来任何实际收益。
内容的提问来源于stack exchange,提问作者Vadym Chekan
相关产品推荐
相关产品推荐

