From 94b1d092b6469aa9876f1cd751517c4730c52cb0 Mon Sep 17 00:00:00 2001 From: Emily Wang Date: Wed, 21 Dec 2022 16:22:10 -0500 Subject: [PATCH 1/5] WIP: add AutoConfigureAfter annotation --- .../SpringAutoConfigClassComposer.java | 24 +++++++++++++++++++ .../EchoSpringAutoConfigurationFull.golden | 2 ++ .../EchoSpringAutoConfigurationGrpc.golden | 2 ++ ...EchoSpringAutoConfigurationGrpcRest.golden | 2 ++ 4 files changed, 30 insertions(+) diff --git a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java index 7408994b17..6938ab3b13 100644 --- a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java +++ b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java @@ -71,6 +71,7 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -265,6 +266,7 @@ private static MethodDefinition createConstructor( private static List createClassAnnotations( Service service, Map types) { // @AutoConfiguration + // @AutoConfigureAfter(GcpContextAutoConfiguration.class) // @ConditionalOnClass(LanguageServiceClient.class) // @ConditionalOnProperty(value = // "com.google.cloud.language.v1.spring.auto.language-service.enabled", matchIfMissing = true) @@ -307,6 +309,16 @@ private static List createClassAnnotations( .setStaticReferenceType(types.get("ServiceClient")) .build()) .build(); + AnnotationNode autoConfigureAfterNode = + AnnotationNode.builder() + .setType(STATIC_TYPES.get("AutoConfigureAfter")) + .setDescription( + VariableExpr.builder() + .setVariable( + Variable.builder().setType(TypeNode.CLASS_OBJECT).setName("class").build()) + .setStaticReferenceType(types.get("GcpContextAutoConfiguration")) + .build()) + .build(); AnnotationNode configurationNode = AnnotationNode.builder().setType(STATIC_TYPES.get("AutoConfiguration")).build(); AnnotationNode enableConfigurationPropertiesNode = @@ -322,6 +334,7 @@ private static List createClassAnnotations( return Arrays.asList( configurationNode, + autoConfigureAfterNode, conditionalOnClassNode, conditionalOnPropertyNode, enableConfigurationPropertiesNode); @@ -951,6 +964,7 @@ private static Map createStaticTypes() { EnableConfigurationProperties.class, CredentialsProvider.class, AutoConfiguration.class, + AutoConfigureAfter.class, Bean.class, Qualifier.class, DefaultCredentialsProvider.class, @@ -999,6 +1013,15 @@ private static Map createDynamicTypes(Service service, String .setPakkage("com.google.cloud.spring.core.util") .build()); + // TODO: This should move to static types after adding spring-cloud-gcp-autoconfigure as + // dependency + TypeNode gcpContextAutoConfiguration = + TypeNode.withReference( + VaporReference.builder() + .setName("GcpContextAutoConfiguration") + .setPakkage("com.google.cloud.spring.autoconfigure") + .build()); + TypeNode serviceClient = TypeNode.withReference( VaporReference.builder() @@ -1026,6 +1049,7 @@ private static Map createDynamicTypes(Service service, String typeMap.put("ServiceSettingsBuilder", serviceSettingsBuilder); typeMap.put("Retry", retryProperties); typeMap.put("RetryUtil", retryUtil); + typeMap.put("GcpContextAutoConfiguration", gcpContextAutoConfiguration); return typeMap; } diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden index 7e07ecfe33..fa092e123b 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationFull.golden @@ -35,6 +35,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -58,6 +59,7 @@ import org.springframework.context.annotation.Bean; @Generated("by google-cloud-spring-generator") @BetaApi("Autogenerated Spring autoconfiguration is not yet stable") @AutoConfiguration +@AutoConfigureAfter(GcpContextAutoConfiguration.class) @ConditionalOnClass(EchoClient.class) @ConditionalOnProperty( value = "com.google.showcase.v1beta1.spring.auto.echo.enabled", diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden index a822ef8805..f7404be261 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpc.golden @@ -17,6 +17,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -38,6 +39,7 @@ import org.springframework.context.annotation.Bean; * */ @AutoConfiguration +@AutoConfigureAfter(GcpContextAutoConfiguration.class) @ConditionalOnClass(EchoClient.class) @ConditionalOnProperty( value = "com.google.showcase.v1beta1.spring.auto.echo.enabled", diff --git a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden index 055274714b..4a4243b98e 100644 --- a/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden +++ b/src/test/java/com/google/api/generator/spring/composer/goldens/EchoSpringAutoConfigurationGrpcRest.golden @@ -18,6 +18,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -39,6 +40,7 @@ import org.springframework.context.annotation.Bean; * */ @AutoConfiguration +@AutoConfigureAfter(GcpContextAutoConfiguration.class) @ConditionalOnClass(EchoClient.class) @ConditionalOnProperty( value = "com.google.showcase.v1beta1.spring.auto.echo.enabled", From d6e400e4c6d2bd3c812199956d89651d6a44301d Mon Sep 17 00:00:00 2001 From: Emily Wang Date: Wed, 4 Jan 2023 08:32:59 -0500 Subject: [PATCH 2/5] Update dependency from spring-cloud-gcp-core to autoconfigure --- BUILD.bazel | 1 + WORKSPACE | 2 +- pom.xml | 2 +- .../composer/SpringAutoConfigClassComposer.java | 14 +++----------- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 362d83d2a8..3ebbe83dc4 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -53,6 +53,7 @@ SPRING_DEPS = [ "@maven//:org_springframework_boot_spring_boot", "@maven//:org_springframework_spring_context", "@maven//:org_springframework_spring_beans", + "@maven//:com_google_cloud_spring_cloud_gcp_autoconfigure", "@maven//:com_google_cloud_spring_cloud_gcp_core", "@maven//:commons_logging_commons_logging", ] diff --git a/WORKSPACE b/WORKSPACE index 3eedf8aaa9..24f9fe1fb9 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,7 +82,7 @@ load("@rules_jvm_external//:defs.bzl", "maven_install") SPRING_MAVEN_ARTIFACTS = [ "org.springframework.boot:spring-boot-starter:2.7.4", - "com.google.cloud:spring-cloud-gcp-core:3.3.0", + "com.google.cloud:spring-cloud-gcp-autoconfigure:3.3.0", ] maven_install( diff --git a/pom.xml b/pom.xml index 063770f211..dee5a47ee9 100644 --- a/pom.xml +++ b/pom.xml @@ -332,7 +332,7 @@ com.google.cloud - spring-cloud-gcp-core + spring-cloud-gcp-autoconfigure 3.3.0 diff --git a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java index 6938ab3b13..8098761026 100644 --- a/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java +++ b/src/main/java/com/google/api/generator/spring/composer/SpringAutoConfigClassComposer.java @@ -58,6 +58,7 @@ import com.google.api.generator.spring.utils.ComposerUtils; import com.google.api.generator.spring.utils.LoggerUtils; import com.google.api.generator.spring.utils.Utils; +import com.google.cloud.spring.autoconfigure.core.GcpContextAutoConfiguration; import com.google.cloud.spring.core.Credentials; import com.google.cloud.spring.core.DefaultCredentialsProvider; import com.google.common.base.CaseFormat; @@ -316,7 +317,7 @@ private static List createClassAnnotations( VariableExpr.builder() .setVariable( Variable.builder().setType(TypeNode.CLASS_OBJECT).setName("class").build()) - .setStaticReferenceType(types.get("GcpContextAutoConfiguration")) + .setStaticReferenceType(STATIC_TYPES.get("GcpContextAutoConfiguration")) .build()) .build(); AnnotationNode configurationNode = @@ -963,6 +964,7 @@ private static Map createStaticTypes() { ConditionalOnMissingBean.class, EnableConfigurationProperties.class, CredentialsProvider.class, + GcpContextAutoConfiguration.class, AutoConfiguration.class, AutoConfigureAfter.class, Bean.class, @@ -1013,15 +1015,6 @@ private static Map createDynamicTypes(Service service, String .setPakkage("com.google.cloud.spring.core.util") .build()); - // TODO: This should move to static types after adding spring-cloud-gcp-autoconfigure as - // dependency - TypeNode gcpContextAutoConfiguration = - TypeNode.withReference( - VaporReference.builder() - .setName("GcpContextAutoConfiguration") - .setPakkage("com.google.cloud.spring.autoconfigure") - .build()); - TypeNode serviceClient = TypeNode.withReference( VaporReference.builder() @@ -1049,7 +1042,6 @@ private static Map createDynamicTypes(Service service, String typeMap.put("ServiceSettingsBuilder", serviceSettingsBuilder); typeMap.put("Retry", retryProperties); typeMap.put("RetryUtil", retryUtil); - typeMap.put("GcpContextAutoConfiguration", gcpContextAutoConfiguration); return typeMap; } From 345b3c418618790f8a0146f47300532f43f5cd5f Mon Sep 17 00:00:00 2001 From: Emily Wang Date: Wed, 4 Jan 2023 08:47:58 -0500 Subject: [PATCH 3/5] Bump spring-cloud-gcp-autoconfigure version to latest --- WORKSPACE | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 24f9fe1fb9..0168823bba 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -82,7 +82,7 @@ load("@rules_jvm_external//:defs.bzl", "maven_install") SPRING_MAVEN_ARTIFACTS = [ "org.springframework.boot:spring-boot-starter:2.7.4", - "com.google.cloud:spring-cloud-gcp-autoconfigure:3.3.0", + "com.google.cloud:spring-cloud-gcp-autoconfigure:3.4.1", ] maven_install( diff --git a/pom.xml b/pom.xml index dee5a47ee9..64f732d00c 100644 --- a/pom.xml +++ b/pom.xml @@ -333,7 +333,7 @@ com.google.cloud spring-cloud-gcp-autoconfigure - 3.3.0 + 3.4.1