Skip to content

feat(parametermanager): add support for gcp parameter manager service#3699

Merged
jinseopkim0 merged 19 commits intoGoogleCloudPlatform:mainfrom
suvidha-malaviya:feat(parameter-manager)-add-support-for-parameter-manager
Aug 26, 2025
Merged

feat(parametermanager): add support for gcp parameter manager service#3699
jinseopkim0 merged 19 commits intoGoogleCloudPlatform:mainfrom
suvidha-malaviya:feat(parameter-manager)-add-support-for-parameter-manager

Conversation

@suvidha-malaviya
Copy link
Copy Markdown
Contributor

@suvidha-malaviya suvidha-malaviya commented Mar 27, 2025

Issue: #3698

Description
This pull request introduces a feature to the Spring Cloud GCP library, adding support for the parameter manager module. This enhancement enables the library to resolve the parameter presented in GCP Parameter Manager in the application.properties file and using the @Value annotation. It also expose the CRUD methods for the Parameter Manager. It will be implemented the same way as secretmanager is implemented.

Proposed Changes:

  • Add the support of parametermanager module in the spring-cloud-gcp which provides below functionality.
    • Inject parameter from Parameter Manager using @Value annotation with specified path i.e pm@pm@global/my-param/v1
    • Resolve the parameter from the Parameter Manager specified in the application.properties file
    • Expose the methods for createParameter, enableParameterVersion, disableParameterVersion, deleteParameterVersion, getParameterString, deleteParameter, renderedParameterVersionString
  • Add sample application which uses parametermanager to showcase the usecases
  • Add the documentation to reflect the new capabilities of parametermanager

Refer to the parametermanager.adoc file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working of the global and regional parameter operations.

  • Create parameter with given location, parameterId, version and payload
  • Create parameter with given project, location, parameterId, version and payload
  • Create parameter with given location, parameterId, version and payload, format
  • Create parameter with given project, location, parameterId, version and payload, format
  • Create parameter with given location, parameterId, version and payload and invalid projectId (project on which user doesn't have access)
  • Enable parameter version with given location, parameterId and version
  • Enable parameter version with given project, location, parameterId and version
  • Disable parameter version with given location, parameterId and version
  • Disable parameter version with given project, location, parameterId and version
  • Delete parameter with location and parameterId
  • Delete parameter with project, location and parameterId
  • Delete parameter version with location, parameterId and version
  • Delete parameter version with project, location, parameterId and version
  • Check if parameter exist with location and parameterId
  • Check if parameter exist with project, location and parameterId
  • Check if parameter version exist with location, parameterId and version
  • Check if parameter version exist with project, location, parameterId and version
  • Read parameter with parameter Identifier
  • Render parameter with parameter Identifier
  • Inject with @value annotation
  • Read parameter with project, location, parameterId and version for other project using service account
  • Check parameter resolution mentioned in the application.properties.

More information about parameter manager: https://cloud.google.com/secret-manager/parameter-manager/docs/overview

@jinseopkim0 jinseopkim0 self-requested a review May 2, 2025 14:59
Comment thread docs/src/main/asciidoc/parametermanager.adoc
@suvidha-malaviya suvidha-malaviya force-pushed the feat(parameter-manager)-add-support-for-parameter-manager branch from f5db654 to aa4c9d7 Compare July 2, 2025 11:50
@suvidha-malaviya suvidha-malaviya requested a review from a team as a code owner July 2, 2025 11:50
jinseopkim0
jinseopkim0 previously approved these changes Jul 17, 2025
@jinseopkim0 jinseopkim0 requested a review from gptSanyam July 17, 2025 03:04
@jinseopkim0 jinseopkim0 self-requested a review July 17, 2025 15:25
@jinseopkim0
Copy link
Copy Markdown
Contributor

I tried running the integration tests and they came back with some errors. Could you please take a look?

GOOGLE_CLOUD_PROJECT=spring-cloud-gcp-ci ./mvnw \
            --batch-mode \
            --no-transfer-progress \
            --activate-profiles spring-cloud-gcp-ci-it \
            --define maven.javadoc.skip=true \
            --define skip.surefire.tests=true \
            --define org.slf4j.simpleLogger.showDateTime=true \
            --define org.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss:SSS \
            --define it.parametermanager=true \
            verify
...
23:33:49:795 [INFO] -------------------------------------------------------
23:33:49:795 [INFO]  T E S T S
23:33:49:795 [INFO] -------------------------------------------------------
23:33:50:354 [INFO] Running com.example.ParameterManagerSampleLoadParametersIntegrationTests
23:33:50.773 [main] ERROR org.springframework.boot.SpringApplication -- Application run failed
java.lang.IllegalArgumentException: Unable to instantiate factory class [com.google.cloud.spring.autoconfigure.secretmanager.SecretManagerConfigDataLocationResolver] for factory type [org.springframework.boot.context.config.ConfigDataLocationResolver]
	at org.springframework.core.io.support.SpringFactoriesLoader$FailureHandler.lambda$throwing$0(SpringFactoriesLoader.java:641)
	at org.springframework.core.io.support.SpringFactoriesLoader$FailureHandler.lambda$handleMessage$3(SpringFactoriesLoader.java:665)
	at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:227)
	at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:202)
	at org.springframework.core.io.support.SpringFactoriesLoader.load(SpringFactoriesLoader.java:158)
	at org.springframework.boot.context.config.ConfigDataLocationResolvers.<init>(ConfigDataLocationResolvers.java:66)
	at org.springframework.boot.context.config.ConfigDataEnvironment.createConfigDataLocationResolvers(ConfigDataEnvironment.java:160)
	at org.springframework.boot.context.config.ConfigDataEnvironment.<init>(ConfigDataEnvironment.java:148)
	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.getConfigDataEnvironment(ConfigDataEnvironmentPostProcessor.java:101)
	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:96)
	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:89)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:132)
	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:115)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
	at org.springframework.boot.context.event.EventPublishingRunListener.multicastInitialEvent(EventPublishingRunListener.java:136)
	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:81)
	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:64)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:118)
	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:112)
	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:63)
	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:353)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
	at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:144)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
	at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
	at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1461)
	at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:563)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:144)
	at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:110)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)
	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)
	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:155)
	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:111)
	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
	at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:159)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:378)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:383)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$12(ClassBasedTestDescriptor.java:378)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:377)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$7(ClassBasedTestDescriptor.java:290)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:289)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:279)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$6(ClassBasedTestDescriptor.java:278)
	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$1(TestMethodTestDescriptor.java:105)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:128)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:128)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:160)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:146)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:144)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:143)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:100)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:198)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:169)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:93)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:58)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:141)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:57)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:103)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:85)
	at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47)
	at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:194)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)
	at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
	at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
	at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
Caused by: java.lang.NoClassDefFoundError: com/google/cloud/spring/secretmanager/SecretManagerServiceClientFactory
	at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3549)
	at java.base/java.lang.Class.getConstructors(Class.java:2227)
	at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.findConstructor(SpringFactoriesLoader.java:399)
	at org.springframework.core.io.support.SpringFactoriesLoader$FactoryInstantiator.forClass(SpringFactoriesLoader.java:388)
	at org.springframework.core.io.support.SpringFactoriesLoader.instantiateFactory(SpringFactoriesLoader.java:223)
	... 107 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.google.cloud.spring.secretmanager.SecretManagerServiceClientFactory
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	... 113 common frames omitted

@suvidha-malaviya
Copy link
Copy Markdown
Contributor Author

I tried running the integration tests and they came back with some errors. Could you please take a look?

Could you please try building the project using mvn clean install at the root level, and then run the integration tests?

@jinseopkim0
Copy link
Copy Markdown
Contributor

I tried running the integration tests and they came back with some errors. Could you please take a look?

Could you please try building the project using mvn clean install at the root level, and then run the integration tests?

I have done this, but I'm still getting the error.

@jinseopkim0
Copy link
Copy Markdown
Contributor

I tried running the integration tests and they came back with some errors. Could you please take a look?

Could you please try building the project using mvn clean install at the root level, and then run the integration tests?

I have done this, but I'm still getting the error.

I've created #3979 as a copy of this PR, to trigger ITs.

@jinseopkim0
Copy link
Copy Markdown
Contributor

I tried running the integration tests and they came back with some errors. Could you please take a look?

Could you please try building the project using mvn clean install at the root level, and then run the integration tests?

I have done this, but I'm still getting the error.

I've created #3979 as a copy of this PR, to trigger ITs.

Still shows errors in integration tests (e.g. https://github.com/GoogleCloudPlatform/spring-cloud-gcp/actions/runs/16457637114/job/46518308602?pr=3979)

@suvidha-malaviya
Copy link
Copy Markdown
Contributor Author

Still shows errors in integration tests (e.g. https://github.com/GoogleCloudPlatform/spring-cloud-gcp/actions/runs/16457637114/job/46518308602?pr=3979)

This module is the same as the Secret Manager module. Since the PR for regional support in Secret Manager has been merged, this PR needs to be updated accordingly. I will let you know once it's done

@suvidha-malaviya
Copy link
Copy Markdown
Contributor Author

@jinseopkim0 I've updated the PR. Please take a look.

@jinseopkim0
Copy link
Copy Markdown
Contributor

@jinseopkim0 I've updated the PR. Please take a look.

Thanks, confirmed integration tests are passing in #3979.

jinseopkim0
jinseopkim0 previously approved these changes Aug 19, 2025
Comment thread docs/src/main/asciidoc/parametermanager.adoc Outdated
Comment thread docs/src/main/asciidoc/parametermanager.adoc Outdated
Comment thread docs/src/main/asciidoc/parametermanager.adoc Outdated
@jinseopkim0 jinseopkim0 merged commit c0748f1 into GoogleCloudPlatform:main Aug 26, 2025
11 checks passed
lqiu96 pushed a commit that referenced this pull request Aug 29, 2025
🤖 I have created a release *beep* *boop*
---


##
[7.3.0](v7.2.0...v7.3.0)
(2025-08-29)


### Features

* **parametermanager:** add support for gcp parameter manager service
([#3699](#3699))
([c0748f1](c0748f1))


### Bug Fixes

* **deps:** update dependency com.google.cloud:libraries-bom to v26.67.0
([#4104](#4104))
([e8aec00](e8aec00))
* **deps:** update gapic-generator-java-bom.version to v2.62.0
([#4099](#4099))
([8a91c2c](8a91c2c))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 added a commit that referenced this pull request Sep 26, 2025
Backports the following PRs to 3.x: #3699, #3684, #4127
jinseopkim0 pushed a commit that referenced this pull request Sep 26, 2025
…#3699)

Issue:
[#3698](#3698)

**Description**
This pull request introduces a feature to the Spring Cloud GCP library,
adding support for the parameter manager module. This enhancement
enables the library to resolve the parameter presented in GCP Parameter
Manager in the `application.properties` file and using the `@Value`
annotation. It also expose the CRUD methods for the Parameter Manager.
It will be implemented the same way as `secretmanager` is implemented.

**Proposed Changes:**
- Add the support of `parametermanager` module in the s`pring-cloud-gcp`
which provides below functionality.
- Inject parameter from Parameter Manager using `@Value` annotation with
specified path i.e `pm@pm@global/my-param/v1`
- Resolve the parameter from the Parameter Manager specified in the
`application.properties` file
- Expose the methods for `createParameter`, `enableParameterVersion`,
`disableParameterVersion`, `deleteParameterVersion`,
`getParameterString`, `deleteParameter`,
`renderedParameterVersionString`
- Add sample application which uses `parametermanager` to showcase the
usecases
- Add the documentation to reflect the new capabilities of
`parametermanager`

Refer to the
[parametermanager.adoc](https://github.com/GoogleCloudPlatform/spring-cloud-gcp/blob/2aecef8378274397ee667dd1a9fbcf72da43355d/docs/src/main/asciidoc/parametermanager.adoc)
file for detailed documentation.

Performed the below mentioned manual unit tests to validate the working
of the global and regional parameter operations.
* Create parameter with given location, parameterId, version and payload
* Create parameter with given project, location, parameterId, version
and payload
* Create parameter with given location, parameterId, version and
payload, format
* Create parameter with given project, location, parameterId, version
and payload, format
* Create parameter with given location, parameterId, version and payload
and invalid projectId (project on which user doesn't have access)
* Enable parameter version with given location, parameterId and version
* Enable parameter version with given project, location, parameterId and
version
* Disable parameter version with given location, parameterId and version
* Disable parameter version with given project, location, parameterId
and version
* Delete parameter with location and parameterId
* Delete parameter with project, location and parameterId
* Delete parameter version with location, parameterId and version
* Delete parameter version with project, location, parameterId and
version
* Check if parameter exist with location and parameterId
* Check if parameter exist with project, location and parameterId
* Check if parameter version exist with location, parameterId and
version
* Check if parameter version exist with project, location, parameterId
and version
* Read parameter with parameter Identifier
* Render parameter with parameter Identifier
* Inject with `@value` annotation
* Read parameter with project, location, parameterId and version for
other project using service account
* Check parameter resolution mentioned in the `application.properties`.

More information about parameter manager:
https://cloud.google.com/secret-manager/parameter-manager/docs/overview
jinseopkim0 added a commit that referenced this pull request Sep 26, 2025
Backports the following PRs to 3.x: #3699, #3684, #4127
jinseopkim0 added a commit that referenced this pull request Sep 26, 2025
Backports the following PRs to 3.x: #3699, #3684, #4127
jinseopkim0 added a commit that referenced this pull request Sep 26, 2025
Backports the following PRs to 3.x: #3699, #3684, #4127
jinseopkim0 added a commit that referenced this pull request Sep 29, 2025
Backports the following PRs to 6.x: #3699, #3684, #4127

---------

Co-authored-by: suvidha-malaviya <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants