diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfiguration.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfiguration.java index 67b31816b..cf74d2918 100644 --- a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfiguration.java +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfiguration.java @@ -15,34 +15,37 @@ import io.dapr.client.DaprClient; import io.dapr.client.DaprClientBuilder; +import io.dapr.config.Properties; import io.dapr.spring.core.client.DaprClientCustomizer; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import java.util.stream.Collectors; @AutoConfiguration @ConditionalOnClass(DaprClient.class) +@EnableConfigurationProperties(DaprClientProperties.class) public class DaprClientAutoConfiguration { @Bean - @ConditionalOnMissingBean - DaprClientBuilderConfigurer daprClientBuilderConfigurer(ObjectProvider customizerProvider) { - DaprClientBuilderConfigurer configurer = new DaprClientBuilderConfigurer(); - configurer.setDaprClientCustomizer(customizerProvider.orderedStream().collect(Collectors.toList())); - - return configurer; + @ConditionalOnMissingBean(DaprConnectionDetails.class) + DaprConnectionDetails daprConnectionDetails(DaprClientProperties properties) { + return new PropertiesDaprConnectionDetails(properties); } @Bean @ConditionalOnMissingBean - DaprClientBuilder daprClientBuilder(DaprClientBuilderConfigurer daprClientBuilderConfigurer) { + DaprClientBuilder daprClientBuilder(DaprClientProperties daprClientProperties) { DaprClientBuilder builder = new DaprClientBuilder(); - - return daprClientBuilderConfigurer.configure(builder); + builder.withPropertyOverride(Properties.HTTP_ENDPOINT, daprClientProperties.httpEndpoint()); + builder.withPropertyOverride(Properties.GRPC_ENDPOINT, daprClientProperties.grpcEndpoint()); + builder.withPropertyOverride(Properties.HTTP_PORT, String.valueOf(daprClientProperties.httpPort())); + builder.withPropertyOverride(Properties.GRPC_PORT, String.valueOf(daprClientProperties.grpcPort())); + return builder; } @Bean diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientBuilderConfigurer.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientBuilderConfigurer.java deleted file mode 100644 index ca83ab4fd..000000000 --- a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientBuilderConfigurer.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2024 The Dapr Authors - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and -limitations under the License. -*/ - -package io.dapr.spring.boot.autoconfigure.client; - -import io.dapr.client.DaprClientBuilder; -import io.dapr.spring.core.client.DaprClientCustomizer; - -import java.util.List; - -/** - * Builder for configuring a {@link DaprClientBuilder}. - */ -public class DaprClientBuilderConfigurer { - - private List customizers; - - void setDaprClientCustomizer(List customizers) { - this.customizers = List.copyOf(customizers); - } - - /** - * Configure the specified {@link DaprClientBuilder}. The builder can be further - * tuned and default settings can be overridden. - * - * @param builder the {@link DaprClientBuilder} instance to configure - * @return the configured builder - */ - public DaprClientBuilder configure(DaprClientBuilder builder) { - applyCustomizers(builder); - return builder; - } - - private void applyCustomizers(DaprClientBuilder builder) { - if (this.customizers != null) { - for (DaprClientCustomizer customizer : this.customizers) { - customizer.customize(builder); - } - } - } - -} diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientProperties.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientProperties.java new file mode 100644 index 000000000..ce4439cdd --- /dev/null +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprClientProperties.java @@ -0,0 +1,7 @@ +package io.dapr.spring.boot.autoconfigure.client; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "dapr.client") +public record DaprClientProperties(String httpEndpoint, String grpcEndpoint, Integer httpPort, Integer grpcPort) { +} diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprConnectionDetails.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprConnectionDetails.java new file mode 100644 index 000000000..a3bffea03 --- /dev/null +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/DaprConnectionDetails.java @@ -0,0 +1,11 @@ +package io.dapr.spring.boot.autoconfigure.client; + + +import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails; + +public interface DaprConnectionDetails extends ConnectionDetails { + String httpEndpoint(); + String grpcEndpoint(); + Integer httpPort(); + Integer grcpPort(); +} diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/PropertiesDaprConnectionDetails.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/PropertiesDaprConnectionDetails.java new file mode 100644 index 000000000..c489e9f90 --- /dev/null +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/main/java/io/dapr/spring/boot/autoconfigure/client/PropertiesDaprConnectionDetails.java @@ -0,0 +1,30 @@ +package io.dapr.spring.boot.autoconfigure.client; + +public class PropertiesDaprConnectionDetails implements DaprConnectionDetails { + + private final DaprClientProperties daprClientProperties; + + public PropertiesDaprConnectionDetails(DaprClientProperties daprClientProperties) { + this.daprClientProperties = daprClientProperties; + } + + @Override + public String httpEndpoint() { + return this.daprClientProperties.httpEndpoint(); + } + + @Override + public String grpcEndpoint() { + return this.daprClientProperties.grpcEndpoint(); + } + + @Override + public Integer httpPort() { + return this.daprClientProperties.httpPort(); + } + + @Override + public Integer grcpPort() { + return this.daprClientProperties.grpcPort(); + } +} diff --git a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTests.java b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTests.java index 5124e6064..0545df178 100644 --- a/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTests.java +++ b/dapr-spring/dapr-spring-boot-autoconfigure/src/test/java/io/dapr/spring/boot/autoconfigure/client/DaprClientAutoConfigurationTests.java @@ -29,11 +29,6 @@ class DaprClientAutoConfigurationTests { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(DaprClientAutoConfiguration.class)); - @Test - void daprClientBuilderConfigurer() { - contextRunner.run(context -> assertThat(context).hasSingleBean(DaprClientBuilderConfigurer.class)); - } - @Test void daprClientBuilder() { contextRunner.run(context -> assertThat(context).hasSingleBean(DaprClientBuilder.class)); diff --git a/dapr-spring/dapr-spring-boot-tests/pom.xml b/dapr-spring/dapr-spring-boot-tests/pom.xml new file mode 100644 index 000000000..eec82d696 --- /dev/null +++ b/dapr-spring/dapr-spring-boot-tests/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + + io.dapr.spring + dapr-spring-parent + 0.13.0-SNAPSHOT + + + dapr-spring-boot-tests + dapr-spring-boot-tests + Dapr Spring Boot Tests + jar + + + + org.springframework.boot + spring-boot-testcontainers + + + io.dapr.spring + dapr-spring-boot-autoconfigure + ${project.parent.version} + + + org.testcontainers + junit-jupiter + test + + + com.vaadin.external.google + android-json + + + + + io.dapr + testcontainers-dapr + ${dapr.sdk.alpha.version} + + + + diff --git a/dapr-spring/dapr-spring-boot-tests/src/main/java/io/dapr/spring/boot/tests/DaprContainerConnectionDetailsFactory.java b/dapr-spring/dapr-spring-boot-tests/src/main/java/io/dapr/spring/boot/tests/DaprContainerConnectionDetailsFactory.java new file mode 100644 index 000000000..0ede29d45 --- /dev/null +++ b/dapr-spring/dapr-spring-boot-tests/src/main/java/io/dapr/spring/boot/tests/DaprContainerConnectionDetailsFactory.java @@ -0,0 +1,39 @@ +package io.dapr.spring.boot.tests; + +import io.dapr.spring.boot.autoconfigure.client.DaprConnectionDetails; +import io.dapr.testcontainers.DaprContainer; +import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; +import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; + +public class DaprContainerConnectionDetailsFactory extends ContainerConnectionDetailsFactory { + DaprContainerConnectionDetailsFactory() { + } + protected DaprConnectionDetails getContainerConnectionDetails(ContainerConnectionSource source) { + return new DaprContainerConnectionDetails(source); + } + private static final class DaprContainerConnectionDetails extends ContainerConnectionDetailsFactory.ContainerConnectionDetails implements DaprConnectionDetails { + private DaprContainerConnectionDetails(ContainerConnectionSource source) { + super(source); + } + + @Override + public String httpEndpoint() { + return getContainer().getHttpEndpoint(); + } + + @Override + public String grpcEndpoint() { + return getContainer().getGrpcEndpoint(); + } + + @Override + public Integer httpPort() { + return getContainer().getHttpPort(); + } + + @Override + public Integer grcpPort() { + return getContainer().getGrpcPort(); + } + } +} diff --git a/dapr-spring/pom.xml b/dapr-spring/pom.xml index 6f6083abd..9839bb0dc 100644 --- a/dapr-spring/pom.xml +++ b/dapr-spring/pom.xml @@ -22,6 +22,7 @@ dapr-spring-data dapr-spring-messaging dapr-spring-boot-autoconfigure + dapr-spring-boot-tests dapr-spring-boot-starters/dapr-spring-boot-starter diff --git a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/TestcontainersDaprClientCustomizer.java b/testcontainers-dapr/src/main/java/io/dapr/testcontainers/TestcontainersDaprClientCustomizer.java deleted file mode 100644 index 06a568d58..000000000 --- a/testcontainers-dapr/src/main/java/io/dapr/testcontainers/TestcontainersDaprClientCustomizer.java +++ /dev/null @@ -1,40 +0,0 @@ -package io.dapr.testcontainers; - -import io.dapr.client.DaprClientBuilder; -import io.dapr.config.Properties; -import io.dapr.spring.core.client.DaprClientCustomizer; - -public class TestcontainersDaprClientCustomizer implements DaprClientCustomizer { - - private final String httpEndpoint; - private final String grpcEndpoint; - private final String daprHttpPort; - private final String daprGrpcPort; - - /** - * Constructor for TestcontainersDaprClientCustomizer. - * @param httpEndpoint HTTP endpoint. - * @param grpcEndpoint GRPC endpoint. - * @param daprHttpPort Dapr HTTP port. - * @param daprGrpcPort Dapr GRPC port. - */ - public TestcontainersDaprClientCustomizer( - String httpEndpoint, - String grpcEndpoint, - String daprHttpPort, - String daprGrpcPort - ) { - this.httpEndpoint = httpEndpoint; - this.grpcEndpoint = grpcEndpoint; - this.daprHttpPort = daprHttpPort; - this.daprGrpcPort = daprGrpcPort; - } - - @Override - public void customize(DaprClientBuilder daprClientBuilder) { - daprClientBuilder.withPropertyOverride(Properties.HTTP_ENDPOINT, httpEndpoint); - daprClientBuilder.withPropertyOverride(Properties.GRPC_ENDPOINT, grpcEndpoint); - daprClientBuilder.withPropertyOverride(Properties.HTTP_PORT, daprHttpPort); - daprClientBuilder.withPropertyOverride(Properties.GRPC_PORT, daprGrpcPort); - } -}