From 4403694023c53ae42c868172d0375bc9148fc747 Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Sun, 16 Feb 2025 14:14:03 +0200 Subject: [PATCH] Auto-configure CqlTemplate and ReactiveCqlTemplate See gh-44287 Signed-off-by: Dmytro Nosan --- .../data/cassandra/CassandraDataAutoConfiguration.java | 10 +++++++++- .../CassandraReactiveDataAutoConfiguration.java | 10 +++++++++- .../cassandra/CassandraDataAutoConfigurationTests.java | 9 ++++++++- .../CassandraReactiveDataAutoConfigurationTests.java | 9 ++++++++- 4 files changed, 34 insertions(+), 4 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 890b4895414e..8fa09aaaf32d 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-2024 the original author or authors. + * Copyright 2012-2025 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. @@ -45,6 +45,8 @@ import org.springframework.data.cassandra.core.convert.CassandraConverter; import org.springframework.data.cassandra.core.convert.CassandraCustomConversions; import org.springframework.data.cassandra.core.convert.MappingCassandraConverter; +import org.springframework.data.cassandra.core.cql.CqlOperations; +import org.springframework.data.cassandra.core.cql.CqlTemplate; import org.springframework.data.cassandra.core.mapping.CassandraMappingContext; import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; @@ -120,6 +122,12 @@ public CassandraTemplate cassandraTemplate(SessionFactory sessionFactory, Cassan return new CassandraTemplate(sessionFactory, converter); } + @Bean + @ConditionalOnMissingBean(CqlOperations.class) + public CqlTemplate cqlTemplate(SessionFactory sessionFactory) { + return new CqlTemplate(sessionFactory); + } + @Bean @ConditionalOnMissingBean public CassandraCustomConversions cassandraCustomConversions() { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.java index 00d83b5f76da..e218317fb16d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 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. @@ -30,6 +30,8 @@ import org.springframework.data.cassandra.core.ReactiveCassandraOperations; import org.springframework.data.cassandra.core.ReactiveCassandraTemplate; import org.springframework.data.cassandra.core.convert.CassandraConverter; +import org.springframework.data.cassandra.core.cql.ReactiveCqlOperations; +import org.springframework.data.cassandra.core.cql.ReactiveCqlTemplate; import org.springframework.data.cassandra.core.cql.session.DefaultBridgedReactiveSession; import org.springframework.data.cassandra.core.cql.session.DefaultReactiveSessionFactory; @@ -65,4 +67,10 @@ public ReactiveCassandraTemplate reactiveCassandraTemplate(ReactiveSession react return new ReactiveCassandraTemplate(reactiveCassandraSession, converter); } + @Bean + @ConditionalOnMissingBean(ReactiveCqlOperations.class) + public ReactiveCqlTemplate reactiveCqlTemplate(ReactiveSessionFactory reactiveCassandraSessionFactory) { + return new ReactiveCqlTemplate(reactiveCassandraSessionFactory); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationTests.java index 932ba62cafce..6d3057077aac 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraDataAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 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. @@ -33,6 +33,7 @@ import org.springframework.data.cassandra.core.CassandraTemplate; import org.springframework.data.cassandra.core.convert.CassandraConverter; import org.springframework.data.cassandra.core.convert.CassandraCustomConversions; +import org.springframework.data.cassandra.core.cql.CqlTemplate; import org.springframework.data.cassandra.core.mapping.CassandraMappingContext; import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; import org.springframework.data.domain.ManagedTypes; @@ -65,6 +66,12 @@ void templateExists() { assertThat(this.context.getBeanNamesForType(CassandraTemplate.class)).hasSize(1); } + @Test + void cqlTemplateExists() { + load(CassandraMockConfiguration.class); + assertThat(this.context.getBeanNamesForType(CqlTemplate.class)).hasSize(1); + } + @Test void entityScanShouldSetManagedTypes() { load(EntityScanConfig.class); diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfigurationTests.java index 5e0521c65013..818f2cacabdc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2022 the original author or authors. + * Copyright 2012-2025 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. @@ -27,6 +27,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.cassandra.core.ReactiveCassandraTemplate; import org.springframework.data.cassandra.core.convert.CassandraConverter; +import org.springframework.data.cassandra.core.cql.ReactiveCqlTemplate; import org.springframework.data.cassandra.core.mapping.CassandraMappingContext; import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; import org.springframework.data.domain.ManagedTypes; @@ -58,6 +59,12 @@ void templateExists() { assertThat(this.context.getBeanNamesForType(ReactiveCassandraTemplate.class)).hasSize(1); } + @Test + void reactiveCqlTemplateExists() { + load("spring.cassandra.keyspaceName:boot_test"); + assertThat(this.context.getBeanNamesForType(ReactiveCqlTemplate.class)).hasSize(1); + } + @Test void entityScanShouldSetManagedTypes() { load(EntityScanConfig.class, "spring.cassandra.keyspaceName:boot_test");