Spring Data-támogatás

Ez a cikk azt ismerteti, hogyan használható együtt a Spring Cloud Azure és a Spring Data.

Spring Data Azure Cosmos DB-támogatás

Azure Cosmos DB egy globálisan elosztott adatbázis-szolgáltatás, amely lehetővé teszi a fejlesztők számára, hogy különböző szabványos API-k, például az SQL, a MongoDB, a Graph és az Azure Table Storage használatával dolgozzanak az adatokkal.

Függőségek beállítása

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>

Konfiguráció

Megjegyzés

Ha biztonsági taggal hitelesíti és engedélyezi a Microsoft Entra-azonosítót egy Azure-erőforrás eléréséhez, győződjön meg arról, hogy a biztonsági tag megfelelő engedélyt kapott az Azure-erőforrás eléréséhez. További információ: Hozzáférés engedélyezése a Microsoft Entra-azonosítóval.

Az alábbi táblázat a spring-cloud-azure-starter-data-cosmoskonfigurálható tulajdonságait sorolja fel:

Ingatlan Leírás
spring.cloud.azure.cosmos.enabled Egy érték, amely jelzi, hogy az Azure Cosmos DB szolgáltatás engedélyezve van-e. Az alapértelmezett érték a true.
spring.cloud.azure.cosmos.database Az Azure Cosmos DB-adatbázis azonosítója.
spring.cloud.azure.cosmos.endpoint Az Azure Cosmos DB csatlakoztatásához használt URI.
spring.cloud.azure.cosmos.key Az Azure Cosmos DB csatlakoztatásához használt PrivateKey.
spring.cloud.azure.cosmos.credential.client-certificate-password A tanúsítványfájl jelszava.
spring.cloud.azure.cosmos.credential.client-certificate-path Annak a PEM-tanúsítványfájlnak az elérési útja, amelyet az Azure-ral végzett egyszerű szolgáltatásnév-hitelesítéshez kell használni.
spring.cloud.azure.cosmos.credential.client-id Az azure-ral végzett egyszerű szolgáltatáshitelesítéshez használandó ügyfél-azonosító.
spring.cloud.azure.cosmos.credential.client-secret A szolgáltatásnév-hitelesítés Azure-ral történő végrehajtásakor használandó ügyfélkulcs.
spring.cloud.azure.cosmos.credential.managed-identity-enabled A felügyelt identitás engedélyezése. Az alapértelmezett érték a false.
spring.cloud.azure.cosmos.credential.password A felhasználónév-/jelszó-hitelesítés Azure-beli végrehajtásakor használandó jelszó.
spring.cloud.azure.cosmos.credential.username A felhasználónév/jelszó azure-beli hitelesítéséhez használandó felhasználónév.
spring.cloud.azure.cosmos.populate-query-metrics Egy érték, amely jelzi, hogy fel kell-e tölteni a diagnosztikai sztringeket és a lekérdezési metrikákat. Az alapértelmezett érték a false.
spring.cloud.azure.cosmos.consistency-level Az Azure Cosmos DB konzisztenciaszintje.

Főbb fogalmak

Az alábbi lista a Spring Data-támogatás fő fogalmait mutatja be:

  • A Spring Data CrudRepository és ReactiveCrudRepository, amelyek a következő alapvető CRUD-funkciókat biztosítják:

    • megment
    • keresd az összeset
    • findOne azonosító alapján
    • összes törlése
    • törlés azonosító szerint
    • entitás törlése
  • A Spring Data @Id széljegyzet. Egy domainosztály mezőjét kétféleképpen képezheti le egy Azure Cosmos DB-dokumentum id elemére:

    • Mező jegyzetelése a tartományosztályban @Id. Ez a mező az Azure Cosmos DB-ben található id dokumentumhoz lesz leképezve.
    • Állítsa a mező nevét erre: id. Ez a mező az Azure Cosmos DB-ben a(z) id dokumentumhoz lesz leképezve.

    Megjegyzés

    Ha mindkét módszert alkalmazza, a @Id jegyzet nagyobb prioritással rendelkezik.

  • Egyéni gyűjteménynevek. Alapértelmezés szerint a gyűjtemény neve a felhasználói tartományosztály osztályneve lesz. A testreszabáshoz csak adja hozzá a(z) @Document(collection="myCustomCollectionName") annotációt a domainosztályhoz, és ennyi.

  • Támogatja az Azure Cosmos DB-partíciót. Ha a tartományosztály egyik mezőjét partíciókulcs-mezőként szeretné megadni, fűzze hozzá @PartitionKey. CRUD-műveletek végrehajtásakor adja meg a partíció értékét. További példa: AddressRepositoryIT.java a GitHubon.

  • Támogatja Spring Data egyéni lekérdezési keresési műveletet.

  • Támogatja spring-boot-starter-data-rest.

  • Támogatja a tartományosztályok lista- és beágyazott típusait.

Alapszintű használat

Privát kulcs használata az Azure Cosmos DB eléréséhez

Az Azure Cosmos DB és a spring-cloud-azure-starter-data-cosmos összekapcsolásának legegyszerűbb módja egy elsődleges kulccsal. Adja hozzá a következő tulajdonságokat:

spring:
  cloud:
    azure:
      cosmos:
        key: ${AZURE_COSMOS_KEY}
        endpoint: ${AZURE_COSMOS_ENDPOINT}
        database: ${AZURE_COSMOS_DATABASE}

Entitás definiálása

Definiáljon egy entitást dokumentumként az Azure Cosmos DB-ben az alábbi példában látható módon:

@Container(containerName = "mycollection")
public class User {
    @Id
    private String id;
    private String firstName;
    @PartitionKey
    private String lastName;
    private String address;

    public User() {
    }

    public User(String id, String firstName, String lastName, String address) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return String.format("%s %s, %s", firstName, lastName, address);
    }
}

A id mező a dokumentum id-jeként lesz használva az Azure Cosmos DB-ben. Másik lehetőségként bármely mezőt annotálhat a(z) @Id használatával, hogy azt a(z) id dokumentumhoz rendelje.

A jegyzet @Container(containerName = "mycollection") a dokumentum gyűjteménynevének megadására szolgál az Azure Cosmos DB-ben.

Adattárak létrehozása

Adattárak létrehozásához bővítse ki a ReactiveCosmosRepository felületet, amely támogatja a Spring Data-adattárat.

@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
    Flux<User> findByFirstName(String firstName);
}

A ReactiveCosmosRepository felület jelenleg alapszintű mentési, törlési és keresési műveleteket biztosít. Később további műveletek is támogatottak lesznek.

Alkalmazásosztály létrehozása

Az alábbi példa egy alkalmazásosztályt hoz létre az összes összetevővel:

@SpringBootApplication
public class CosmosSampleApplication implements CommandLineRunner {

private static final Logger LOGGER = LoggerFactory.getLogger(CosmosSampleApplication.class);

    @Autowired
    private UserRepository repository;

    @Autowired
    private CosmosProperties properties;

    public static void main(String[] args) {
        SpringApplication.run(CosmosSampleApplication.class, args);
    }

    public void run(String... var1) {
        final User testUser = new User("testId", "testFirstName",
                "testLastName", "test address line one");

        // Save the User class to Azure Cosmos DB database.
        final Mono<User> saveUserMono = repository.save(testUser);

        final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");

        //  Nothing happens until we subscribe to these Monos.
        //  findById won't return the user as user isn't present.
        final Mono<User> findByIdMono = repository.findById(testUser.getId());
        final User findByIdUser = findByIdMono.block();
        Assert.isNull(findByIdUser, "User must be null");

        final User savedUser = saveUserMono.block();
        Assert.state(savedUser != null, "Saved user must not be null");
        Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()),
                "Saved user first name doesn't match");

        firstNameUserFlux.collectList().block();

        final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
        Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");

        final User result = optionalUserResult.get();
        Assert.state(result.getFirstName().equals(testUser.getFirstName()),
                "query result firstName doesn't match!");
        Assert.state(result.getLastName().equals(testUser.getLastName()),
                "query result lastName doesn't match!");
        LOGGER.info("findOne in User collection get result: {}", result.toString());

    }

    @PostConstruct
    public void setup() {
        // For this example, remove all of the existing records.
        this.repository.deleteAll().block();
    }
}

Ez a példa egy automatikusan injektált UserRepository interfészt tartalmaz a mentési, törlési és keresési műveletek támogatására.

Minták

Tekintse meg a azure-spring-boot-samples GitHubon.

A spring-cloud-azure-starter-data-cosmos könyvtár használata mellett közvetlenül is használhatja azure-spring-data-cosmos kódtárat az összetettebb helyzetekhez. További információkért lásd: Spring Data for Azure Cosmos DB ügyfélkódtára.