From 83439421479a80d657664c9125e563013e9bf4c1 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 15 Mar 2024 14:29:06 +0100 Subject: [PATCH 1/2] Delay interaction with Lazy CqlSession bean until first usage Though the CqlSession provided by the CassandraAutoConfiguration can be lazy, the configuration for Data Cassandra triggers early bean instantiation. This commit uses new APIs in Data Cassandra to make use of the intended lazy bean initialization and therefore prevents the application from failing to start up when Cassandra might not yet be ready. See gh-39948 --- .../data/cassandra/CassandraDataAutoConfiguration.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java index bd70e7d00f1..38a29ebdcea 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java @@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.boot.autoconfigure.domain.EntityScanPackages; import org.springframework.boot.context.properties.bind.Binder; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Lazy; import org.springframework.core.env.Environment; import org.springframework.data.cassandra.CassandraManagedTypes; import org.springframework.data.cassandra.SessionFactory; @@ -54,6 +55,7 @@ import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; * @author EddĂș MelĂ©ndez * @author Mark Paluch * @author Madhura Bhave + * @author Christoph Strobl * @since 1.3.0 */ @AutoConfiguration(after = CassandraAutoConfiguration.class) @@ -63,7 +65,7 @@ public class CassandraDataAutoConfiguration { private final CqlSession session; - public CassandraDataAutoConfiguration(CqlSession session) { + public CassandraDataAutoConfiguration(@Lazy CqlSession session) { this.session = session; } @@ -95,7 +97,7 @@ public class CassandraDataAutoConfiguration { public CassandraConverter cassandraConverter(CassandraMappingContext mapping, CassandraCustomConversions conversions) { MappingCassandraConverter converter = new MappingCassandraConverter(mapping); - converter.setCodecRegistry(this.session.getContext().getCodecRegistry()); + converter.setCodecRegistry(() -> this.session.getContext().getCodecRegistry()); converter.setCustomConversions(conversions); converter.setUserTypeResolver(new SimpleUserTypeResolver(this.session)); return converter; From 21bd300e099962e2ee719d502c3640f6c7b9a564 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 10 Apr 2024 18:16:31 +0100 Subject: [PATCH 2/2] Polish "Delay interaction with Lazy CqlSession bean until first usage" See gh-39948 --- .../data/cassandra/CassandraDataAutoConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java index 38a29ebdcea..890b4895414 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License.