From c8105413b9333ade0dbe788b710f84e2827c7d71 Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Fri, 24 Jan 2020 11:13:33 +0200 Subject: [PATCH] Fix scope of CqlSessionBuilder bean See gh-19899 --- .../cassandra/CassandraAutoConfiguration.java | 2 ++ .../cassandra/CassandraAutoConfigurationTests.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.java index 6bd25aa01f..2a272e1a1b 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.java @@ -44,6 +44,7 @@ import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Scope; /** * {@link EnableAutoConfiguration Auto-configuration} for Cassandra. @@ -69,6 +70,7 @@ public class CassandraAutoConfiguration { @Bean @ConditionalOnMissingBean + @Scope("prototype") public CqlSessionBuilder cassandraSessionBuilder(CassandraProperties properties, DriverConfigLoader driverConfigLoader, ObjectProvider builderCustomizers) { CqlSessionBuilder builder = CqlSession.builder().withConfigLoader(driverConfigLoader); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java index e2f1be8027..9cfad7df97 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfigurationTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.autoconfigure.cassandra; +import com.datastax.oss.driver.api.core.CqlIdentifier; +import com.datastax.oss.driver.api.core.CqlSessionBuilder; import com.datastax.oss.driver.api.core.config.DefaultDriverOption; import com.datastax.oss.driver.api.core.config.DriverConfigLoader; import com.datastax.oss.driver.api.core.config.DriverExecutionProfile; @@ -42,6 +44,17 @@ class CassandraAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(CassandraAutoConfiguration.class)); + @Test + void cqlSessionBuilderThreadSafe() { + this.contextRunner.run((context) -> { + CqlIdentifier keyspace = CqlIdentifier.fromCql("test"); + assertThat(context).hasSingleBean(CqlSessionBuilder.class); + assertThat(context.getBean(CqlSessionBuilder.class).withKeyspace(keyspace)) + .hasFieldOrPropertyWithValue("keyspace", keyspace); + assertThat(context.getBean(CqlSessionBuilder.class)).hasFieldOrPropertyWithValue("keyspace", null); + }); + } + @Test void driverConfigLoaderWithDefaultConfiguration() { this.contextRunner.run((context) -> {