【问题标题】:Removing/shutdown Firebase in Java app (for hot redepoy)在 Java 应用程序中删除/关闭 Firebase(用于热重新部署)
【发布时间】:2023-04-01 13:00:01
【问题描述】:

我尝试使用org.springframework.boot:spring-boot-devtools 来加快开发速度。

我的项目使用 Firebase 对一些请求进行身份验证。 Firebase 通过以下方式初始化:

@PostConstruct
public void instantiateFirebase() throws IOException {
    FirebaseOptions options = new FirebaseOptions.Builder()
            .setDatabaseUrl(String.format("https://%s.firebaseio.com", configuration.getFirebaseDatabase()))
            .setServiceAccount(serviceJson.getInputStream())
            .build();
    FirebaseApp.initializeApp(options);
}

在更改.class 文件时重新加载上下文后,Spring 报告错误:

Caused by: java.lang.IllegalStateException: FirebaseApp name [DEFAULT] already exists!
    at com.google.firebase.internal.Preconditions.checkState(Preconditions.java:173)
    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:180)
    at com.google.firebase.FirebaseApp.initializeApp(FirebaseApp.java:160)

哪些 Firebase API 允许注销/销毁我应该在 @PreDestroy 中使用的 FirebaseApp?

【问题讨论】:

    标签: spring firebase spring-boot-devtools


    【解决方案1】:

    似乎无法禁用/关闭/重新初始化 Firebase 应用。

    在我的情况下,将该实例保留在内存中而不进行更改是可以的。

    根据您的要求,您可以简单地使用:

    @PostConstruct
    public void instantiateFirebase() throws IOException {
        // We use only FirebaseApp.DEFAULT_APP_NAME, so check is simple.
        if ( ! FirebaseApp.getApps().isEmpty())
            return;
    
        Resource serviceJson = applicationContext.getResource(String.format("classpath:firebase/%s", configuration.getFirebaseServiceJson()));
    
        FirebaseOptions options = new FirebaseOptions.Builder()
                .setDatabaseUrl(String.format("https://%s.firebaseio.com", configuration.getFirebaseDatabase()))
                .setServiceAccount(serviceJson.getInputStream())
                .build();
        FirebaseApp.initializeApp(options);
    }
    

    或过滤数据,如:

    for (FirebaseApp app : FirebaseApp.getApps()) {
        if (app.getName().equals(FirebaseApp.DEFAULT_APP_NAME))
            return;
    }
    

    【讨论】:

    • 这确实是检索现有默认应用程序的常用方法。如果您需要实际更改配置,您应该创建一个新的应用程序实例。请参阅 the Firebase documentationmy answer here 了解有关如何执行此操作的更多信息。
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2020-08-19
    • 2014-03-29
    相关资源
    最近更新 更多