java 如何禁用Google云平台集成?

webghufk  于 2023-01-01  发布在  Java
关注(0)|答案(6)|浏览(122)

我在POM文件中有这两个依赖项:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>

我想在某些配置文件中禁用这些GCP功能。我需要在本地测试我的应用,但GCP一直在妨碍我。

ffx8fchx

ffx8fchx1#

Spring在设置应用程序时依赖于自动配置。在许多情况下,它扫描类路径以查找特定的依赖项,如果存在,则执行自动配置。大多数情况下,可以通过提供特定的条件来绕过自动配置。
在遍历Spring云gcp模块时,我遇到了StackdriverLoggingAutoConfiguration类(source)和StackdriverTraceAutoConfigurationsource)。
堆栈驱动程序记录自动配置具有条件ConditionalOnProperty(value="spring.cloud.gcp.logging.enabled", matchIfMissing=true),而堆栈驱动程序跟踪自动配置具有条件@ConditionalOnProperty(value="spring.cloud.gcp.trace.enabled", matchIfMissing=true)
我不完全确定这些属性是否与您使用的模块的自动配置有关,但您可以通过向应用程序添加以下内容来禁用日志记录-{localprofile}.properties:

spring.cloud.gcp.logging.enabled=false
spring.cloud.gcp.trace.enabled=false
hl0ma9xz

hl0ma9xz2#

因为问题是
如何禁用Google云平台集成
我建议只使用以下命令更改配置

spring:
  cloud:
    gcp:
      core:
        enabled: false

在我们的项目中禁用与Spring Cloud GCP相关的所有内容应该就足够了
可接受的答案告诉你如何禁用我们项目中使用的部分GCP特性。如果你有很多特性(日志记录、发布订阅、存储...),那么禁用所有特性可能会很麻烦。这是一个一次性禁用所有特性的快捷方式;- )

monwx1rj

monwx1rj3#

您可以禁用跟踪、、日志记录并提供假ID,如下所示:

spring.cloud.gcp.project-id=fake-project-id
spring.cloud.gcp.logging.enabled=false
spring.cloud.gcp.trace.enabled=false
laximzn5

laximzn54#

如果要禁用gcp pubsud,则需要添加
spring.cloud.gcp.core.enabled =假
启用spring.cloud.gcp.发布订阅=假

ohfgkhjo

ohfgkhjo5#

我知道它很旧,但是您也可以通过注解禁用AutoConfiguration类。
例如:

@EnableAutoConfiguration(exclude = {GcpStorageAutoConfiguration.class})

我希望有一天能帮助到别人:)

v440hwme

v440hwme6#

只是作为思考的食粮。
如果您正在构建一个应用程序,它可以在不同的环境中工作(就像我的情况一样-本地,或者使用GCP资源在GCP上)-无论如何都要避免使用spring-cloud-gcp-starter
properly无法使用这些工具来管理应用的生命周期,因为它们都是静态初始化的,总是在GCP模式下工作,或者不工作。
相反,我建议考虑使用好的旧Google库(f.e.https://cloud.google.com/storage/docs/reference/libraries)而不是spring-starter库来构建您自己的GcpFileProvidergcp-whatever-provider
这种方法:
1.除了仅在需要时使用之外,您还可以省去管理这些配置的麻烦。
1.节省您从黑客通过这些静态初始化这样或那样的方式(完全可行,但imho不值得的努力,并导致非常复杂的设置真正简单的事情)。
1.为您提供一个选项,可以根据需要动态切换提供程序。
最后一点实际上可以很好地帮助集成测试。
P.S. "* 我只想让它在GCP上运行OOB *"的所有便利性都能完美地与这些Google库一起工作,就像它们与Spring一起工作一样。
GCP Bucket阅读器的小示例,在初始化时乐观地获取可用凭证,与spring-libs相同:
等级:

dependencies {
...
    implementation platform('com.google.cloud:libraries-bom:26.2.0')
    implementation 'com.google.cloud:google-cloud-storage'

}

提供者:

import com.google.cloud.storage.*;

...
    // .getDefaultInstance() actually does all the bootstrap for GCP services that you might need.
    Storage storage = StorageOptions.getDefaultInstance().getService();

    Blob blob = getStorage().get(BlobId.of(bucketName, itemSubPathAndName));
    ReadChannel reader = blob.reader();
    InputStream inputStream = Channels.newInputStream(reader);
...

然后,在我的测试中,我可以轻松地动态切换概要文件,甚至可以确保只有在GCP配置可用且有效时,集成测试才运行:
通用/本地:

...
@ActiveProfiles("localResources")
...
public class SomeLocalOrGenericTests {
...
}

GCP/整合:

...
@ActiveProfiles("gcpResources")
...
public class SomeIntegrationTest {
...
    private Boolean gcpCredsAreValid = false;
    @BeforeAll
    public void setup() {
        var project = "UNKNOWN";
        try {
            project = ((UserCredentials) GoogleCredentials.getApplicationDefault()).getQuotaProjectId();
            if (!project.isEmpty() && !project.contains("test")  && !project.equals("UNKNOWN")) {
                gcpCredsAreValid = true;
            }
        } catch (Exception e) {
            Logger.getGlobal().log(Level.SEVERE, String.format("gcpCredsAreValid is false. ProjectID is: %s%n", project));
        }
    }

    // And then

    @Test
    public void testingThatSomethingIsAvailableAtGcpBucket() {
        Assumptions.assumeTrue(gcpCredsAreValid, "Skipping GCP tests as GCP credentials are invalid");
        // Actual test of integrations, that will reliably run only if GCP is configured, and available
    }

}

相关问题