«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 Загрузите 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
Как только сервер заработает, мы можем вывести список всех членов:
Name | Id
------------ | ------------------------------------------------------------------
basicLocator | 10.25.3.192(basicLocator:25461:locator)<ec><v0>:1024 [Coordinator]
basicServer | 10.25.3.192(basicServer:25546)<v1>:1025
Вывод командной строки gfsh должен список локатора и сервера:
mvn spring-boot:run
Вуаля! Мы готовы запустить наше клиентское приложение кэша с помощью команды Maven:
6. Конфигурация
Давайте настроим наше клиентское приложение кэша для доступа к данным через сервер Apache Geode.
6.1. Регион
@Region("Authors")
public class Author {
@Id
private Long id;
private String firstName;
private String lastName;
private int age;
}
Сначала мы создадим объект с именем Author, а затем определим его как регион Apache Geode. Регион похож на таблицу в СУБД:
Давайте рассмотрим аннотации Spring Data Geode, объявленные в объекте Author.
Для начала @Region создаст регион Authors на сервере Apache Geode для сохранения объекта Author.
Затем @Id пометит свойство как первичный ключ.
6.2. Entity
Мы можем включить сущность Author, добавив @EnableEntityDefinedRegions.
@EnableEntityDefinedRegions(basePackageClasses = Author.class)
@EnableClusterConfiguration
// existing annotations
public class ClientCacheApp {
// ...
}
Также мы добавим @EnableClusterConfiguration, чтобы приложение могло создавать регионы на сервере Apache Geode:
gfsh>list regions
List of regions
---------------
Authors
Таким образом, перезапуск приложения создаст регионы автоматически:
6.3. Репозиторий
Далее мы добавим операции CRUD для объекта Author.
public interface AuthorRepository extends CrudRepository<Author, Long> {
}
Для этого давайте создадим репозиторий с именем AuthorRepository, который расширяет CrudRepository Spring Data:
@EnableGemfireRepositories(basePackageClasses = AuthorRepository.class)
// existing annotations
public class ClientCacheApp {
// ...
}
Затем мы включим AuthorRepository, добавив @EnableGemfireRepositories:
Теперь мы все настроено для выполнения операций CRUD над сущностью Author с использованием таких методов, как save и findById, предоставляемых CrudRepository.
6.4. Индексы
Spring Data Geode предоставляет простой способ создания и включения индексов на сервере Apache Geode.
@EnableIndexing
// existing annotations
public class ClientCacheApp {
// ...
}
Сначала мы добавим @EnableIndexing в класс ClientCacheApp:
public class Author {
@Id
private Long id;
@Indexed
private int age;
// existing data members
}
Затем добавим @Indexed к свойству в классе Author:
Здесь Spring Data Geode автоматически реализует индексы на основе аннотаций, определенных в сущности Author.
Следовательно, @Id реализует индекс первичного ключа для идентификатора. Точно так же @Indexed реализует хэш-индекс для возраста.
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
Теперь давайте перезапустим приложение и подтвердим индексы, созданные на сервере Apache Geode:
Аналогично, мы можем использовать @LuceneIndexed для создания индекса Apache Geode Lucene для типизированных свойств String.
6.5. Непрерывный запрос
«Непрерывный запрос позволяет приложению получать автоматические уведомления при изменении данных на сервере. Он соответствует запросу и опирается на модель подписки.
@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());
}
}
Чтобы добавить эту возможность, мы создадим AuthorService и добавим @ContinuousQuery с соответствующим запросом:
@ClientCacheApplication(subscriptionEnabled = true)
// existing annotations
public class ClientCacheApp {
// ...
}
Чтобы использовать непрерывные запросы, мы включим подписки между серверами и клиентами:
~ ~~ Следовательно, наше приложение будет получать автоматическое уведомление в методе процесса всякий раз, когда мы изменяем объект Author с идентификатором, равным 1.
7. Дополнительные аннотации
Давайте рассмотрим несколько удобных аннотаций, дополнительно доступных в Spring Data Библиотека Геода.
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
Мы можем включить ведение журнала, просто добавив @EnableLogging к основному классу. В то же время мы можем использовать атрибуты logLevel и logFile для установки соответствующих свойств.
7.5. @EnablePdx
Кроме того, мы можем включить технику сериализации PDX Apache Geode для всех наших доменов, просто добавив @EnablePdx в основной класс.
7.6. @EnableSsl и @EnableSecurity
Мы можем использовать @EnableSsl для включения TCP/IP-сокета Apache Geode SSL. Точно так же @EnableSecurity можно использовать для включения безопасности Apache Geode для аутентификации и авторизации.
8. Заключение
В этом руководстве мы изучили данные Spring для Apache Geode.
Для начала мы создали приложение Spring Boot, которое будет служить клиентским приложением кэша Apache Geode.
В то же время мы рассмотрели несколько удобных аннотаций, предоставляемых Spring Data Geode, для настройки и включения функций Apache Geode.
Наконец, мы изучили несколько дополнительных аннотаций, таких как @PeerCacheApplication и @CacheServerApplication, чтобы изменить приложение на одноранговый узел или сервер в конфигурации кластера.