基于 Spring Cloud GCP Data Firestore 中基于环境的属性动态加载集合名称@实体上的文档注释

问题描述 投票:0回答:0

设置非常基本。有一个实体、一个存储库和一个与 Google Cloud Firestore 交互的服务。实体的

@Document
注释具有从特定于环境的
collectionName
文件派生的
application.properties

当使用有效且可用的文档 ID 进行

firestoreEntityRepository.findById(documentId)
调用时,我们会得到一个
null
返回值。如果
collectionName
使用特定环境的有效集合名称进行硬编码,我们将获得适当的文档。因此,这肯定与运行时未绑定(或未按预期顺序初始化)的集合名称有关。

Firestore 实体

import com.google.cloud.firestore.annotation.DocumentId;
import com.google.cloud.spring.data.firestore.Document;

@Document(collectionName = "${api.firestore.collection}")
public class FirestoreEntity {
    @DocumentId
    String documentId;
    String fieldOne;
    String fieldTwo;
}

Firestore 实体存储库

import com.google.cloud.spring.data.firestore.FirestoreReactiveRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface FirestoreEntityRepository extends FirestoreReactiveRepository<FirestoreEntity> {
}

Firestore 实体服务

@Service
public class FirestoreEntityService {

    private final FirestoreEntityRepository firestoreEntityRepository;
    
    public FirestoreEntityService(FirestoreEntityRepository firestoreEntityRepository) {
        this.firestoreEntityRepository= firestoreEntityRepository;
    }

    public FirestoreEntity getFirestoreEntity(String documentId) {
        return firestoreEntityRepository
                .findById(documentId)
                .block();
    }
}

除了直接在 SpEL 中使用属性名称外,我还尝试了以下方法,

  1. 使用
    FirestoreConfigProperties
    注释填充 bean
    @ConfigurationProperties("api.firestore")
    并在 collectionName 中引用 bean 名称,如下所示,

@Document(collectionName = "#{@firestoreConfigProperties.getCollection()}")

  1. 在表达式中使用
    systemProperties
    environment
@Document(collectionName = "#{@environment.getProperty('api.firestore.collection')}")

@Document(collectionName = "#{systemProperties['api.firestore.collection']}")

没有任何作用。请就如何实施此解决方案向我提出一些想法。否则,我将不得不放弃 spring 数据并使用低级

Firestore
对象来执行操作。

spring-boot google-cloud-platform google-cloud-firestore spring-cloud spring-cloud-gcp
© www.soinside.com 2019 - 2024. All rights reserved.