From 519bf47988022c8969382a1f6a967ecefbac08e7 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Tue, 25 Apr 2023 20:37:13 +0200 Subject: [PATCH 1/3] fix autoconfiguration auto load for spring-boot 3 --- ....springframework.boot.autoconfigure.AutoConfiguration.imports | 1 + 1 file changed, 1 insertion(+) create mode 100644 analytics-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/analytics-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/analytics-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..7f6cefa5 --- /dev/null +++ b/analytics-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.segment.analytics.autoconfigure.SegmentAnalyticsAutoConfiguration From 3692398c27b83716fa21f2306feb3f215cb3152c Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Tue, 25 Apr 2023 19:18:54 +0200 Subject: [PATCH 2/3] add customizer interface for spring boot integration This to allow customization of the client, without having to manually create the client. --- .../SegmentAnalyticsAutoConfiguration.java | 7 +++++-- .../SegmentAnalyticsCustomizer.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsCustomizer.java diff --git a/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsAutoConfiguration.java b/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsAutoConfiguration.java index 9d6a8ae4..82386ae1 100644 --- a/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsAutoConfiguration.java +++ b/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsAutoConfiguration.java @@ -1,6 +1,7 @@ package com.segment.analytics.autoconfigure; import com.segment.analytics.Analytics; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -20,7 +21,9 @@ public class SegmentAnalyticsAutoConfiguration { @Autowired private SegmentProperties properties; @Bean - public Analytics segmentAnalytics() { - return Analytics.builder(properties.getWriteKey()).build(); + public Analytics segmentAnalytics(ObjectProvider customizerProvider) { + Analytics.Builder builder = Analytics.builder(properties.getWriteKey()); + customizerProvider.orderedStream().forEach((customizer) -> customizer.customize(builder)); + return builder.build(); } } diff --git a/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsCustomizer.java b/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsCustomizer.java new file mode 100644 index 00000000..7d795c79 --- /dev/null +++ b/analytics-spring-boot-starter/src/main/java/com/segment/analytics/autoconfigure/SegmentAnalyticsCustomizer.java @@ -0,0 +1,21 @@ +package com.segment.analytics.autoconfigure; + +import com.segment.analytics.Analytics; + +/** + * Callback interface that can be used to customize a {@link com.segment.analytics.Analytics.Builder + * Analytics.Builder}. + * + * @author Koen Punt + */ +@FunctionalInterface +public interface SegmentAnalyticsCustomizer { + + /** + * Callback to customize a {@link com.segment.analytics.Analytics.Builder Analytics.Builder} + * instance. + * + * @param analyticsBuilder the analytics builder to customize + */ + void customize(Analytics.Builder analyticsBuilder); +} From a39b5a28d9e016df3402039248c3a2875f047b06 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Tue, 25 Apr 2023 20:25:13 +0200 Subject: [PATCH 3/3] update readme for customizer --- analytics-spring-boot-starter/README.adoc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/analytics-spring-boot-starter/README.adoc b/analytics-spring-boot-starter/README.adoc index c5283002..5cf02e7f 100644 --- a/analytics-spring-boot-starter/README.adoc +++ b/analytics-spring-boot-starter/README.adoc @@ -25,3 +25,17 @@ In your Spring Boot configuration (`application.properties`, environment, or similar), provide the property `segment.analytics.writeKey`. The autoconfiguration will register an `Analytics` bean in the Spring context ready for use. + +=== Customization + +To customize the `Analytics` client you can define a `SegmentAnalyticsCustomizer` bean, +which receives the builder instance. + +For example if you want to use a regional endpoint you can define a customizer like so: + +```java +@Bean +SegmentAnalyticsCustomizer segmentAnalyticsCustomizer() { + return builder -> builder.endpoint("events.eu1.segmentapis.com"); +} +```