Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak je možné společně používat Spring Cloud Azure a Spring Data.
Podpora služby Spring Data Azure Cosmos DB
azure Cosmos DB je globálně distribuovaná databázová služba, která vývojářům umožňuje pracovat s daty pomocí různých standardních rozhraní API, jako jsou SQL, MongoDB, Graph a Azure Table Storage.
Nastavení závislostí
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
</dependency>
Konfigurace
Poznámka
Pokud k ověřování a autorizaci pomocí ID Microsoft Entra pro přístup k prostředku Azure používáte objekt zabezpečení, ujistěte se, že objekt zabezpečení má dostatečná oprávnění pro přístup k prostředku Azure. Další informace naleznete v tématu Autorizace přístupu pomocí microsoft Entra ID.
Následující tabulka uvádí konfigurovatelné vlastnosti spring-cloud-azure-starter-data-cosmos:
Klíčové koncepty
Následující seznam ukazuje klíčové koncepty podpory Spring Data:
Spring Data
CrudRepositoryaReactiveCrudRepository, které poskytují následující základní funkce CRUD:- uložit
- nalezniVše
- najítJedno podle ID
- smazat vše
- odstranit podle ID
- smazat entitu
Poznámka k @Id Spring Data Pole ve třídě domény můžete mapovat dvěma způsoby na
iddokumentu Azure Cosmos DB:- Přidání poznámek k poli ve třídě domény pomocí
@Id. Toto pole se mapuje na dokumentidve službě Azure Cosmos DB. - Nastavte název tohoto pole na
id. Toto pole se mapuje na dokumentidve službě Azure Cosmos DB.
Poznámka
Pokud se použijí oba způsoby, má
@Idpoznámka vyšší prioritu.- Přidání poznámek k poli ve třídě domény pomocí
Názvy vlastních kolekcí Ve výchozím nastavení bude název kolekce název třídy uživatelské domény. Pokud ho chcete přizpůsobit, přidejte poznámku
@Document(collection="myCustomCollectionName")do vaší třídy domény, to je vše.Podporuje oddílu služby Azure Cosmos DB . Pokud chcete zadat pole vaší třídy domény, které má být polem klíče oddílu, anotujte ho pomocí
@PartitionKey. Při operacích CRUD zadejte hodnotu oddílu. Další příklady najdete v tématu AddressRepositoryIT.java na GitHubu.Podporuje operaci hledání vlastních dotazů Spring Data.
Podporuje
spring-boot-starter-data-rest.Podporuje seznam a vnořené typy v třídách domény.
Základní využití
Použití privátního klíče pro přístup ke službě Azure Cosmos DB
Nejjednodušší způsob připojení služby Azure Cosmos DB s spring-cloud-azure-starter-data-cosmos je s primárním klíčem. Přidejte následující vlastnosti:
spring:
cloud:
azure:
cosmos:
key: ${AZURE_COSMOS_KEY}
endpoint: ${AZURE_COSMOS_ENDPOINT}
database: ${AZURE_COSMOS_DATABASE}
Definování entity
Definujte entitu jako dokument ve službě Azure Cosmos DB, jak je znázorněno v následujícím příkladu:
@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);
}
}
Pole id se použije jako id dokumentu ve službě Azure Cosmos DB. Alternativně můžete anotovat libovolné pole pomocí @Id a mapovat ho na dokument id.
Poznámka @Container(containerName = "mycollection") slouží k zadání názvu kolekce dokumentu ve službě Azure Cosmos DB.
Vytváření úložišť
Pokud chcete vytvářet úložiště, rozšiřte rozhraní ReactiveCosmosRepository, které poskytuje podporu úložiště Spring Data.
@Repository
public interface UserRepository extends ReactiveCosmosRepository<User, String> {
Flux<User> findByFirstName(String firstName);
}
Rozhraní ReactiveCosmosRepository v současné době poskytuje základní operace ukládání, odstraňování a hledání. Další operace budou podporovány později.
Vytvoření třídy aplikace
Následující příklad vytvoří třídu aplikace se všemi komponentami:
@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();
}
}
Tento příklad obsahuje rozhraní UserRepository s automatickým rozhraním pro podporu operací ukládání, odstraňování a hledání.
Vzorky
Podívejte se na azure-spring-boot-samples GitHub.
Kromě použití knihovny spring-cloud-azure-starter-data-cosmos můžete přímo použít knihovnu azure-spring-data-cosmos pro složitější scénáře. Další informace najdete v tématu Spring Data pro klientskou knihovnu Azure Cosmos DB.