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 .