Перейти к основному содержимому

Введение в Spring Data Geode

· 6 мин. чтения

1. Обзор

Apache Geode предоставляет решения для управления данными через распределенную облачную архитектуру. Было бы идеально использовать API данных Spring для доступа к данным через сервер Apache Geode.

В этом руководстве мы рассмотрим Spring Data Geode для настройки и разработки клиентского Java-приложения Apache Geode.

2. Spring Data Geode

Библиотека Spring Data Geode позволяет приложению Java настраивать сервер Apache Geode с помощью XML и аннотаций. В то же время библиотека также удобна для создания клиент-серверного приложения кэширования Apache Geode.

Библиотека Spring Data Geode похожа на Spring Data Gemfire . Помимо тонких отличий , последний обеспечивает интеграцию с Pivotal Gemfire , который является коммерческой версией Apache Geode.

Попутно мы рассмотрим несколько аннотаций Spring Data Geode, чтобы настроить приложение Java в клиенте кэша Apache Geode.

3. Зависимость от Maven

Давайте добавим последнюю зависимость spring-geode-starter в наш pom.xml :

<dependency>
<groupId>org.springframework.geode</groupId>
<artifactId>spring-geode-starter</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>

4. @ClientCacheApplication Apache Geode с Spring Boot

Во-первых, давайте создадим Spring Boot ClientCacheApp с помощью @SpringBootApplication :

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

Затем, чтобы преобразовать класс ClientCacheApp в клиент кэша Apache Geode, мы добавим предоставленный Spring Data Geode @ClientCacheApplication :

@ClientCacheApplication
// existing annotations
public class ClientCacheApp {
// ...
}

Вот и все! Клиентское приложение кэша готово к запуску.

Однако перед запуском нашего приложения нам нужно запустить сервер Apache Geode.

5. Запустите сервер Apache Geode

Предполагая, что Apache Geode и интерфейс командной строки gfsh уже настроены , мы можем запустить локатор с именем basicLocator, а затем сервер с именем basicServer.

Для этого запустим следующие команды в интерфейсе командной строки gfsh :

gfsh>start locator --name="basicLocator"
gfsh>start server --name="basicServer"

Как только сервер заработает, мы можем перечислить всех участников:

gfsh>list members

Вывод gfsh CLI должен содержать список локатора и сервера:

Name     | Id
------------ | ------------------------------------------------------------------
basicLocator | 10.25.3.192(basicLocator:25461:locator)<ec><v0>:1024 [Coordinator]
basicServer | 10.25.3.192(basicServer:25546)<v1>:1025

Вуаля! Все готово для запуска нашего клиентского приложения кэша с помощью команды Maven:

mvn spring-boot:run

6. Конфигурация

Давайте настроим наше клиентское приложение кэша для доступа к данным через сервер Apache Geode.

6.1. Область, край

Сначала мы создадим объект с именем Author , а затем определим его как регион Apache Geode. Регион похож на таблицу в СУБД:

@Region("Authors")
public class Author {
@Id
private Long id;

private String firstName;
private String lastName;
private int age;
}

Давайте рассмотрим аннотации Spring Data Geode, объявленные в сущности Author .

Для начала @Region создаст регион Authors на сервере Apache Geode для сохранения объекта Author .

Затем @Id пометит свойство как первичный ключ.

6.2. Организация

Мы можем включить сущность Author , добавив @EnableEntityDefinedRegions .

Кроме того, мы добавим @EnableClusterConfiguration , чтобы приложение могло создавать регионы на сервере Apache Geode:

@EnableEntityDefinedRegions(basePackageClasses = Author.class)
@EnableClusterConfiguration
// existing annotations
public class ClientCacheApp {
// ...
}

Поэтому перезапуск приложения автоматически создаст регионы:

gfsh>list regions

List of regions
---------------
Authors

6.3. Репозиторий

Далее мы добавим операции CRUD для объекта Author .

Для этого давайте создадим репозиторий с именем AuthorRepository, который расширяет CrudRepository Spring Data :

public interface AuthorRepository extends CrudRepository<Author, Long> {
}

Затем мы включим AuthorRepository , добавив @EnableGemfireRepositories :

@EnableGemfireRepositories(basePackageClasses = AuthorRepository.class)
// existing annotations
public class ClientCacheApp {
// ...
}

Теперь все готово для выполнения CRUD-операций над сущностью Author с использованием таких методов, как save и findById , предоставленных CrudRepository .

6.4. Индексы

Spring Data Geode предоставляет простой способ создания и включения индексов на сервере Apache Geode.

Во- первых, мы добавим @EnableIndexing в класс ClientCacheApp :

@EnableIndexing
// existing annotations
public class ClientCacheApp {
// ...
}

Затем добавим @Indexed к свойству в классе Author :

public class Author {
@Id
private Long id;

@Indexed
private int age;

// existing data members
}

Здесь Spring Data Geode автоматически реализует индексы на основе аннотаций, определенных в объекте Author .

Следовательно, @Id реализует индекс первичного ключа для id . Точно так же @Indexed реализует хеш-индекс для возраста .

Теперь давайте перезапустим приложение и подтвердим индексы, созданные на сервере Apache Geode:

gfsh> list indexes

Member Name | Region Path | Name | Type | Indexed Expression | From Clause | Valid Index
----------- | ----------- | ----------------- | ----- | ------------------ | ----------- | -----------
basicServer | /Authors | AuthorsAgeKeyIdx | RANGE | age | /Authors | true
basicServer | /Authors | AuthorsIdHashIdx | RANGE | id | /Authors | true

Точно так же мы можем использовать @LuceneIndexed для создания индекса Apache Geode Lucene для свойств, типизированных String .

6.5. Непрерывный запрос

Непрерывный запрос позволяет приложению получать автоматические уведомления при изменении данных на сервере. Он соответствует запросу и опирается на модель подписки.

Чтобы добавить возможность, мы создадим AuthorService и добавим @ContinuousQuery с соответствующим запросом:

@Service
public class AuthorService {
@ContinuousQuery(query = "SELECT * FROM /Authors a WHERE a.id = 1")
public void process(CqEvent event) {
System.out.println("Author #" + event.getKey() + " updated to " + event.getNewValue());
}
}

Чтобы использовать непрерывные запросы, мы включим подписки между серверами и клиентами:

@ClientCacheApplication(subscriptionEnabled = true)
// existing annotations
public class ClientCacheApp {
// ...
}

Следовательно, наше приложение будет получать автоматическое уведомление в методе процесса всякий раз, когда мы изменяем объект Author с идентификатором , равным 1.

7. Дополнительные аннотации

Давайте рассмотрим несколько удобных аннотаций, дополнительно доступных в библиотеке Spring Data Geode.

7.1. @PeerCacheApplication

До сих пор мы рассматривали приложение Spring Boot в качестве клиента кэша Apache Geode. Иногда нам может потребоваться, чтобы наше приложение было приложением однорангового кэша Apache Geode.

Затем мы должны аннотировать основной класс с помощью @PeerCacheApplication вместо @CacheClientApplication .

Кроме того, @PeerCacheApplication автоматически создаст экземпляр встроенного однорангового кэша для подключения.

7.2. @CacheServerApplication

Точно так же, чтобы наше приложение Spring Boot было и одноранговым членом, и сервером, мы можем аннотировать основной класс с помощью @CacheServerApplication .

7.3. @EnableHttpService

Мы можем включить встроенный HTTP-сервер Apache Geode как для @PeerCacheApplication, так и для @CacheServerApplication.

Для этого нам нужно аннотировать основной класс с помощью @EnableHttpService . По умолчанию служба HTTP запускается на порту 7070.

7.4. @Включить ведение журнала

Мы можем включить ведение журнала, просто добавив @EnableLogging в основной класс. В то же время мы можем использовать атрибуты logLevel и logFile для установки соответствующих свойств.

7.5. @EnablePdx

Кроме того, мы можем включить технику сериализации PDX Apache Geode для всех наших доменов, просто добавив @EnablePdx в основной класс.

7.6. @EnableSsl и @EnableSecurity

Мы можем использовать @EnableSsl для включения TCP/IP Socket SSL Apache Geode. Точно так же @EnableSecurity можно использовать для включения безопасности Apache Geode для аутентификации и авторизации.

8. Заключение

В этом руководстве мы изучили данные Spring для Apache Geode.

Для начала мы создали приложение Spring Boot, которое будет служить клиентским приложением кэша Apache Geode.

В то же время мы рассмотрели несколько удобных аннотаций, предоставляемых Spring Data Geode, для настройки и включения функций Apache Geode.

Наконец, мы изучили несколько дополнительных аннотаций, таких как @PeerCacheApplication и @CacheServerApplication , чтобы изменить приложение на одноранговый узел или сервер в конфигурации кластера.

Как обычно, все реализации кода доступны на GitHub .